diff --git a/flang/lib/Semantics/resolve-directives.cpp b/flang/lib/Semantics/resolve-directives.cpp index fefccd6c6ceb0..bbb105e3516da 100644 --- a/flang/lib/Semantics/resolve-directives.cpp +++ b/flang/lib/Semantics/resolve-directives.cpp @@ -1123,7 +1123,8 @@ void AccAttributeVisitor::AllowOnlyVariable(const parser::AccObject &object) { common::visitors{ [&](const parser::Designator &designator) { const auto &name{GetLastName(designator)}; - if (name.symbol && !semantics::IsVariableName(*name.symbol)) { + if (name.symbol && !semantics::IsVariableName(*name.symbol) && + !semantics::IsNamedConstant(*name.symbol)) { context_.Say(designator.source, "Only variables are allowed in data clauses on the %s " "directive"_err_en_US, diff --git a/flang/test/Semantics/OpenACC/acc-data.f90 b/flang/test/Semantics/OpenACC/acc-data.f90 index 095d06db91fc3..15176704c335a 100644 --- a/flang/test/Semantics/OpenACC/acc-data.f90 +++ b/flang/test/Semantics/OpenACC/acc-data.f90 @@ -210,4 +210,10 @@ subroutine sub4(t) !$acc data copy(t%t1_proc) !$acc end data end subroutine + + subroutine sub5() + integer, parameter :: iparam = 1024 + !$acc data copyin(iparam) + !$acc end data + end subroutine end module