aboutsummaryrefslogtreecommitdiff
path: root/flang/lib/Semantics
diff options
context:
space:
mode:
authorVitaly Buka <vitalybuka@google.com>2024-04-19 15:41:50 -0700
committerVitaly Buka <vitalybuka@google.com>2024-04-19 15:41:50 -0700
commitfb6bcedb3de596c2ddf56fd0001e3a6624b62257 (patch)
tree32fa165efef87810ce2e68da89ad23cfc545d52a /flang/lib/Semantics
parent31cb633e504579e57f6e01a4f8187089b87f1e2e (diff)
parentd9169ffaf7c01691644537d3443240748b107359 (diff)
downloadllvm-fb6bcedb3de596c2ddf56fd0001e3a6624b62257.zip
llvm-fb6bcedb3de596c2ddf56fd0001e3a6624b62257.tar.gz
llvm-fb6bcedb3de596c2ddf56fd0001e3a6624b62257.tar.bz2
Created using spr 1.3.4 [skip ci]
Diffstat (limited to 'flang/lib/Semantics')
-rw-r--r--flang/lib/Semantics/check-allocate.cpp14
-rw-r--r--flang/lib/Semantics/check-declarations.cpp4
2 files changed, 16 insertions, 2 deletions
diff --git a/flang/lib/Semantics/check-allocate.cpp b/flang/lib/Semantics/check-allocate.cpp
index a7244e1..b4c5660 100644
--- a/flang/lib/Semantics/check-allocate.cpp
+++ b/flang/lib/Semantics/check-allocate.cpp
@@ -611,6 +611,20 @@ bool AllocationCheckerHelper::RunChecks(SemanticsContext &context) {
return false;
}
}
+ if (allocateInfo_.gotPinned) {
+ std::optional<common::CUDADataAttr> cudaAttr{GetCUDADataAttr(ultimate_)};
+ if (!cudaAttr || *cudaAttr != common::CUDADataAttr::Pinned) {
+ context.Say(name_.source,
+ "Object in ALLOCATE must have PINNED attribute when PINNED option is specified"_err_en_US);
+ }
+ }
+ if (allocateInfo_.gotStream) {
+ std::optional<common::CUDADataAttr> cudaAttr{GetCUDADataAttr(ultimate_)};
+ if (!cudaAttr || *cudaAttr != common::CUDADataAttr::Device) {
+ context.Say(name_.source,
+ "Object in ALLOCATE must have DEVICE attribute when STREAM option is specified"_err_en_US);
+ }
+ }
return RunCoarrayRelatedChecks(context);
}
diff --git a/flang/lib/Semantics/check-declarations.cpp b/flang/lib/Semantics/check-declarations.cpp
index 875929e..adbd21d 100644
--- a/flang/lib/Semantics/check-declarations.cpp
+++ b/flang/lib/Semantics/check-declarations.cpp
@@ -956,9 +956,9 @@ void CheckHelper::CheckObjectEntity(
break;
case common::CUDADataAttr::Managed:
if (!IsAutomatic(symbol) && !IsAllocatable(symbol) &&
- !details.isDummy()) {
+ !details.isDummy() && !evaluate::IsExplicitShape(symbol)) {
messages_.Say(
- "Object '%s' with ATTRIBUTES(MANAGED) must also be allocatable, automatic, or a dummy argument"_err_en_US,
+ "Object '%s' with ATTRIBUTES(MANAGED) must also be allocatable, automatic, explicit shape, or a dummy argument"_err_en_US,
symbol.name());
}
break;