Skip to content

Commit 171b655

Browse files
committed
fix CUDA generic resolution for VALUE argument
1 parent f7db7c9 commit 171b655

File tree

3 files changed

+7
-2
lines changed

3 files changed

+7
-2
lines changed

flang/lib/Semantics/check-call.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1033,6 +1033,11 @@ static void CheckExplicitDataArg(const characteristics::DummyDataObject &dummy,
10331033
*actualDataAttr == common::CUDADataAttr::Managed)) {
10341034
actualDataAttr = common::CUDADataAttr::Device;
10351035
}
1036+
if (!actualDataAttr &&
1037+
(*procedure.cudaSubprogramAttrs ==
1038+
common::CUDASubprogramAttrs::Device)) {
1039+
actualDataAttr = common::CUDADataAttr::Device;
1040+
}
10361041
}
10371042
if (dummyDataAttr == common::CUDADataAttr::Device &&
10381043
(dummyIsAssumedShape || dummyIsAssumedRank) &&

flang/lib/Semantics/resolve-names.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9561,7 +9561,8 @@ void ResolveNamesVisitor::CreateGeneric(const parser::GenericSpec &x) {
95619561
static void SetImplicitCUDADevice(bool inDeviceSubprogram, Symbol &symbol) {
95629562
if (inDeviceSubprogram && symbol.has<ObjectEntityDetails>()) {
95639563
auto *object{symbol.detailsIf<ObjectEntityDetails>()};
9564-
if (!object->cudaDataAttr() && !IsFunctionResult(symbol)) {
9564+
if (!object->cudaDataAttr() && !IsValue(symbol) &&
9565+
!IsFunctionResult(symbol)) {
95659566
// Implicitly set device attribute if none is set in device context.
95669567
object->set_cudaDataAttr(common::CUDADataAttr::Device);
95679568
}

flang/test/Semantics/modfile55.cuf

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ end
3333
!contains
3434
!attributes(global) subroutine globsub(x,y,z)
3535
!real(4),value::x
36-
!attributes(device)x
3736
!real(4)::y
3837
!attributes(device) y
3938
!real(4)::z

0 commit comments

Comments
 (0)