diff --git a/flang/lib/Semantics/resolve-directives.cpp b/flang/lib/Semantics/resolve-directives.cpp index b97f7ce58a1c0..fa84c35424108 100644 --- a/flang/lib/Semantics/resolve-directives.cpp +++ b/flang/lib/Semantics/resolve-directives.cpp @@ -1064,7 +1064,8 @@ class OmpAttributeVisitor : DirectiveAttributeVisitor { Symbol::Flag::OmpIsDevicePtr, Symbol::Flag::OmpHasDeviceAddr}; Symbol::Flags privateDataSharingAttributeFlags{Symbol::Flag::OmpPrivate, - Symbol::Flag::OmpFirstPrivate, Symbol::Flag::OmpLastPrivate}; + Symbol::Flag::OmpFirstPrivate, Symbol::Flag::OmpLastPrivate, + Symbol::Flag::OmpLinear}; Symbol::Flags ompFlagsRequireNewSymbol{Symbol::Flag::OmpPrivate, Symbol::Flag::OmpLinear, Symbol::Flag::OmpFirstPrivate, @@ -3263,6 +3264,8 @@ void OmpAttributeVisitor::CheckObjectIsPrivatizable( clauseName = "FIRSTPRIVATE"; } else if (ompFlag == Symbol::Flag::OmpLastPrivate) { clauseName = "LASTPRIVATE"; + } else if (ompFlag == Symbol::Flag::OmpLinear) { + clauseName = "LINEAR"; } if (SymbolOrEquivalentIsInNamelist(symbol)) { diff --git a/flang/test/Semantics/OpenMP/private03.f90 b/flang/test/Semantics/OpenMP/private03.f90 index 61f790fbb38b2..e921d8a58fdba 100644 --- a/flang/test/Semantics/OpenMP/private03.f90 +++ b/flang/test/Semantics/OpenMP/private03.f90 @@ -1,7 +1,7 @@ ! RUN: %python %S/../test_errors.py %s %flang -fopenmp ! OpenMP Version 4.5 ! Variables that appear in expressions for statement function definitions -! may not appear in private, firstprivate or lastprivate clauses. +! may not appear in private, firstprivate, lastprivate or linear clauses. subroutine stmt_function(temp) @@ -34,6 +34,14 @@ subroutine stmt_function(temp) end do !$omp end parallel do + !ERROR: Variable 'p' in statement function expression cannot be in a LINEAR clause + !$omp parallel do simd linear(p) + do i = 1, 10 + t(i) = v(temp) + i + p = p + 1 + end do + !$omp end parallel do simd + print *, t end subroutine stmt_function