From b00b193728aef6f8a9685d0802c4382801d9efca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valentin=20Clement=20=28=E3=83=90=E3=83=AC=E3=83=B3?= =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=B3=20=E3=82=AF=E3=83=AC=E3=83=A1?= =?UTF-8?q?=E3=83=B3=29?= Date: Thu, 6 Feb 2025 19:43:04 -0800 Subject: [PATCH] [flang][cuda] Allow POINTER component to have device attribute (#126116) --- flang/lib/Semantics/check-declarations.cpp | 4 ++-- flang/test/Semantics/cuf03.cuf | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/flang/lib/Semantics/check-declarations.cpp b/flang/lib/Semantics/check-declarations.cpp index 5c26469b9fa2..bf4dc16a15b4 100644 --- a/flang/lib/Semantics/check-declarations.cpp +++ b/flang/lib/Semantics/check-declarations.cpp @@ -989,9 +989,9 @@ void CheckHelper::CheckObjectEntity( } break; case common::CUDADataAttr::Device: - if (isComponent && !IsAllocatable(symbol)) { + if (isComponent && !IsAllocatable(symbol) && !IsPointer(symbol)) { messages_.Say( - "Component '%s' with ATTRIBUTES(DEVICE) must also be allocatable"_err_en_US, + "Component '%s' with ATTRIBUTES(DEVICE) must also be allocatable or pointer"_err_en_US, symbol.name()); } break; diff --git a/flang/test/Semantics/cuf03.cuf b/flang/test/Semantics/cuf03.cuf index 93b136ad7d31..fe9dd5b3ecf0 100644 --- a/flang/test/Semantics/cuf03.cuf +++ b/flang/test/Semantics/cuf03.cuf @@ -54,6 +54,14 @@ module m !ERROR: Object 'um' with ATTRIBUTES(UNIFIED) must be declared in a host subprogram real, unified :: um + type :: t3 + !ERROR: Component 'r' with ATTRIBUTES(DEVICE) must also be allocatable or pointer + real, device :: r + real, device, pointer :: rp ! ok + real, device, allocatable :: ra ! ok + real, device, pointer, contiguous :: rpc ! ok + end type + contains attributes(device) subroutine devsubr(n,da,rs) integer, intent(in) :: n