summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValentin Clement (バレンタイン クレメン) <clementval@gmail.com>2024-04-23 10:01:26 -0700
committerGitHub <noreply@github.com>2024-04-23 10:01:26 -0700
commit49cb6dbcb8537270cd0e2a9bcd6663d2e619f5aa (patch)
treec0b3c6db172a53e43fe3e2f8d36c75b70da5a2f0
parentabfb4915e12f4767de8714cf79591b509b09896e (diff)
[flang][cuda] Remove restriction on device subprogram (#89677)
Newer version allow `pure`, `elemental` and `recursive` on device subprogram.
-rw-r--r--flang/lib/Semantics/check-declarations.cpp4
-rw-r--r--flang/test/Semantics/cuf02.cuf18
2 files changed, 6 insertions, 16 deletions
diff --git a/flang/lib/Semantics/check-declarations.cpp b/flang/lib/Semantics/check-declarations.cpp
index 6fcee96dd690..901ac20f8aae 100644
--- a/flang/lib/Semantics/check-declarations.cpp
+++ b/flang/lib/Semantics/check-declarations.cpp
@@ -1436,10 +1436,6 @@ void CheckHelper::CheckSubprogram(
}
if (cudaAttrs && *cudaAttrs != common::CUDASubprogramAttrs::Host) {
// CUDA device subprogram checks
- if (symbol.attrs().HasAny({Attr::RECURSIVE, Attr::PURE, Attr::ELEMENTAL})) {
- messages_.Say(symbol.name(),
- "A device subprogram may not be RECURSIVE, PURE, or ELEMENTAL"_err_en_US);
- }
if (ClassifyProcedure(symbol) == ProcedureDefinitionClass::Internal) {
messages_.Say(symbol.name(),
"A device subprogram may not be an internal subprogram"_err_en_US);
diff --git a/flang/test/Semantics/cuf02.cuf b/flang/test/Semantics/cuf02.cuf
index 881a3005e281..a4a229565a3e 100644
--- a/flang/test/Semantics/cuf02.cuf
+++ b/flang/test/Semantics/cuf02.cuf
@@ -5,14 +5,11 @@ module m
end
end interface
contains
- !ERROR: A device subprogram may not be RECURSIVE, PURE, or ELEMENTAL
- recursive attributes(device) subroutine s1
+ recursive attributes(device) subroutine s1 ! ok
end
- !ERROR: A device subprogram may not be RECURSIVE, PURE, or ELEMENTAL
- pure attributes(device) subroutine s2
+ pure attributes(device) subroutine s2 ! ok
end
- !ERROR: A device subprogram may not be RECURSIVE, PURE, or ELEMENTAL
- elemental attributes(device) subroutine s3
+ elemental attributes(device) subroutine s3 ! ok
end
subroutine s4
contains
@@ -32,14 +29,11 @@ module m
!ERROR: A function may not have ATTRIBUTES(GLOBAL) or ATTRIBUTES(GRID_GLOBAL)
attributes(global) real function f1
end
- !ERROR: A device subprogram may not be RECURSIVE, PURE, or ELEMENTAL
- recursive attributes(global) subroutine s7
+ recursive attributes(global) subroutine s7 ! ok
end
- !ERROR: A device subprogram may not be RECURSIVE, PURE, or ELEMENTAL
- pure attributes(global) subroutine s8
+ pure attributes(global) subroutine s8 ! ok
end
- !ERROR: A device subprogram may not be RECURSIVE, PURE, or ELEMENTAL
- elemental attributes(global) subroutine s9
+ elemental attributes(global) subroutine s9 ! ok
end
end