Skip to content

Commit 3b20a83

Browse files
authored
[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).
1 parent 58e8683 commit 3b20a83

File tree

4 files changed

+27
-5
lines changed

4 files changed

+27
-5
lines changed

Diff for: flang/include/flang/Semantics/semantics.h

+6-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "scope.h"
1313
#include "symbol.h"
1414
#include "flang/Common/Fortran-features.h"
15+
#include "flang/Common/LangOptions.h"
1516
#include "flang/Evaluate/common.h"
1617
#include "flang/Evaluate/intrinsics.h"
1718
#include "flang/Evaluate/target.h"
@@ -65,15 +66,17 @@ using ConstructStack = std::vector<ConstructNode>;
6566
class SemanticsContext {
6667
public:
6768
SemanticsContext(const common::IntrinsicTypeDefaultKinds &,
68-
const common::LanguageFeatureControl &, parser::AllCookedSources &);
69+
const common::LanguageFeatureControl &, const common::LangOptions &,
70+
parser::AllCookedSources &);
6971
~SemanticsContext();
7072

7173
const common::IntrinsicTypeDefaultKinds &defaultKinds() const {
7274
return defaultKinds_;
7375
}
7476
const common::LanguageFeatureControl &languageFeatures() const {
7577
return languageFeatures_;
76-
};
78+
}
79+
const common::LangOptions &langOptions() const { return langOpts_; }
7780
int GetDefaultKind(TypeCategory) const;
7881
int doublePrecisionKind() const {
7982
return defaultKinds_.doublePrecisionKind();
@@ -273,6 +276,7 @@ class SemanticsContext {
273276

274277
const common::IntrinsicTypeDefaultKinds &defaultKinds_;
275278
const common::LanguageFeatureControl &languageFeatures_;
279+
const common::LangOptions &langOpts_;
276280
parser::AllCookedSources &allCookedSources_;
277281
std::optional<parser::CharBlock> location_;
278282
std::vector<std::string> searchDirectories_;

Diff for: flang/lib/Frontend/CompilerInvocation.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -1531,7 +1531,8 @@ CompilerInvocation::getSemanticsCtx(
15311531
auto &fortranOptions = getFortranOpts();
15321532

15331533
auto semanticsContext = std::make_unique<semantics::SemanticsContext>(
1534-
getDefaultKinds(), fortranOptions.features, allCookedSources);
1534+
getDefaultKinds(), fortranOptions.features, getLangOpts(),
1535+
allCookedSources);
15351536

15361537
semanticsContext->set_moduleDirectory(getModuleDir())
15371538
.set_searchDirectories(fortranOptions.searchDirectories)

Diff for: flang/lib/Semantics/semantics.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -348,9 +348,10 @@ class CommonBlockMap {
348348
SemanticsContext::SemanticsContext(
349349
const common::IntrinsicTypeDefaultKinds &defaultKinds,
350350
const common::LanguageFeatureControl &languageFeatures,
351+
const common::LangOptions &langOpts,
351352
parser::AllCookedSources &allCookedSources)
352353
: defaultKinds_{defaultKinds}, languageFeatures_{languageFeatures},
353-
allCookedSources_{allCookedSources},
354+
langOpts_{langOpts}, allCookedSources_{allCookedSources},
354355
intrinsics_{evaluate::IntrinsicProcTable::Configure(defaultKinds_)},
355356
globalScope_{*this}, intrinsicModulesScope_{globalScope_.MakeScope(
356357
Scope::Kind::IntrinsicModules, nullptr)},

Diff for: flang/tools/bbc/bbc.cpp

+17-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
//===----------------------------------------------------------------------===//
1616

1717
#include "flang/Common/Fortran-features.h"
18+
#include "flang/Common/LangOptions.h"
1819
#include "flang/Common/OpenMP-features.h"
1920
#include "flang/Common/Version.h"
2021
#include "flang/Common/default-kinds.h"
@@ -508,6 +509,21 @@ int main(int argc, char **argv) {
508509
options.predefinitions.emplace_back(
509510
"__flang_patchlevel__"s, std::string{FLANG_VERSION_PATCHLEVEL_STRING});
510511

512+
Fortran::common::LangOptions langOpts;
513+
langOpts.NoGPULib = setNoGPULib;
514+
langOpts.OpenMPVersion = setOpenMPVersion;
515+
langOpts.OpenMPIsTargetDevice = enableOpenMPDevice;
516+
langOpts.OpenMPIsGPU = enableOpenMPGPU;
517+
langOpts.OpenMPForceUSM = enableOpenMPForceUSM;
518+
langOpts.OpenMPTargetDebug = setOpenMPTargetDebug;
519+
langOpts.OpenMPThreadSubscription = setOpenMPThreadSubscription;
520+
langOpts.OpenMPTeamSubscription = setOpenMPTeamSubscription;
521+
langOpts.OpenMPNoThreadState = setOpenMPNoThreadState;
522+
langOpts.OpenMPNoNestedParallelism = setOpenMPNoNestedParallelism;
523+
std::transform(targetTriplesOpenMP.begin(), targetTriplesOpenMP.end(),
524+
std::back_inserter(langOpts.OMPTargetTriples),
525+
[](const std::string &str) { return llvm::Triple(str); });
526+
511527
// enable parsing of OpenMP
512528
if (enableOpenMP) {
513529
options.features.Enable(Fortran::common::LanguageFeature::OpenMP);
@@ -539,7 +555,7 @@ int main(int argc, char **argv) {
539555
Fortran::parser::AllSources allSources;
540556
Fortran::parser::AllCookedSources allCookedSources(allSources);
541557
Fortran::semantics::SemanticsContext semanticsContext{
542-
defaultKinds, options.features, allCookedSources};
558+
defaultKinds, options.features, langOpts, allCookedSources};
543559
semanticsContext.set_moduleDirectory(moduleDir)
544560
.set_moduleFileSuffix(moduleSuffix)
545561
.set_searchDirectories(includeDirs)

0 commit comments

Comments
 (0)