diff --git a/flang/lib/Semantics/resolve-directives.cpp b/flang/lib/Semantics/resolve-directives.cpp --- a/flang/lib/Semantics/resolve-directives.cpp +++ b/flang/lib/Semantics/resolve-directives.cpp @@ -279,18 +279,6 @@ return true; } - bool Pre(const parser::StmtFunctionStmt &x) { - const auto &parsedExpr{std::get>(x.t)}; - if (const auto *expr{GetExpr(parsedExpr)}) { - for (const Symbol &symbol : evaluate::CollectSymbols(*expr)) { - if (!IsStmtFunctionDummy(symbol)) { - stmtFunctionExprSymbols_.insert(symbol.GetUltimate()); - } - } - } - return true; - } - bool Pre(const parser::OpenMPBlockConstruct &); void Post(const parser::OpenMPBlockConstruct &); @@ -530,7 +518,7 @@ void CheckDataCopyingClause( const parser::Name &, const Symbol &, Symbol::Flag); void CheckAssocLoopLevel(std::int64_t level, const parser::OmpClause *clause); - void CheckPrivateDSAObject( + void CheckObjectInNamelist( const parser::Name &, const Symbol &, Symbol::Flag); void CheckSourceLabel(const parser::Label &); void CheckLabelContext(const parser::CharBlock, const parser::CharBlock, @@ -1585,7 +1573,7 @@ CheckMultipleAppearances(*name, *symbol, ompFlag); } if (privateDataSharingAttributeFlags.test(ompFlag)) { - CheckPrivateDSAObject(*name, *symbol, ompFlag); + CheckObjectInNamelist(*name, *symbol, ompFlag); } if (ompFlag == Symbol::Flag::OmpAllocate) { @@ -1779,7 +1767,7 @@ } } -void OmpAttributeVisitor::CheckPrivateDSAObject( +void OmpAttributeVisitor::CheckObjectInNamelist( const parser::Name &name, const Symbol &symbol, Symbol::Flag ompFlag) { const auto &ultimateSymbol{symbol.GetUltimate()}; llvm::StringRef clauseName{"PRIVATE"}; @@ -1794,14 +1782,6 @@ "Variable '%s' in NAMELIST cannot be in a %s clause"_err_en_US, name.ToString(), clauseName.str()); } - - if (stmtFunctionExprSymbols_.find(ultimateSymbol) != - stmtFunctionExprSymbols_.end()) { - context_.Say(name.source, - "Variable '%s' in STATEMENT FUNCTION expression cannot be in a " - "%s clause"_err_en_US, - name.ToString(), clauseName.str()); - } } void OmpAttributeVisitor::CheckSourceLabel(const parser::Label &label) { diff --git a/flang/test/Semantics/omp-private03.f90 b/flang/test/Semantics/omp-private03.f90 deleted file mode 100644 --- a/flang/test/Semantics/omp-private03.f90 +++ /dev/null @@ -1,39 +0,0 @@ -! 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. - -subroutine stmt_function(temp) - - integer :: i, p, q, r - real :: c, f, s, v, t(10) - real, intent(in) :: temp - - c(temp) = p * (temp - q) / r - f(temp) = q + (temp * r/p) - v(temp) = c(temp) + f(temp)/2 - s - - p = 5 - q = 32 - r = 9 - - !ERROR: Variable 'p' in STATEMENT FUNCTION expression cannot be in a PRIVATE clause - !$omp parallel private(p) - s = c(temp) - !$omp end parallel - - !ERROR: Variable 's' in STATEMENT FUNCTION expression cannot be in a FIRSTPRIVATE clause - !$omp parallel firstprivate(s) - s = s + f(temp) - !$omp end parallel - - !ERROR: Variable 's' in STATEMENT FUNCTION expression cannot be in a LASTPRIVATE clause - !$omp parallel do lastprivate(s, t) - do i = 1, 10 - t(i) = v(temp) + i - s - end do - !$omp end parallel do - - print *, t - -end subroutine stmt_function