diff --git a/flang/test/Semantics/OpenMP/default-none.f90 b/flang/test/Semantics/OpenMP/default-none.f90 index 761c2385466a..a56657ccee46 100644 --- a/flang/test/Semantics/OpenMP/default-none.f90 +++ b/flang/test/Semantics/OpenMP/default-none.f90 @@ -58,3 +58,18 @@ subroutine sub( aaa) ccc= aaa(ip) end do end subroutine sub + +! Test that threadprivate variables with host association +! have a predetermined DSA +subroutine host_assoc() + integer, save :: i + !$omp threadprivate(i) + real, save :: r + !$omp threadprivate(r) +contains + subroutine internal() +!$omp parallel default(none) + print *, i, r +!$omp end parallel + end subroutine internal +end subroutine host_assoc diff --git a/flang/test/Semantics/OpenMP/threadprivate09.f90 b/flang/test/Semantics/OpenMP/threadprivate09.f90 new file mode 100644 index 000000000000..64fe048fa3e6 --- /dev/null +++ b/flang/test/Semantics/OpenMP/threadprivate09.f90 @@ -0,0 +1,33 @@ +! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp +! OpenMP Version 5.1 +! Check OpenMP construct validity for the following directives: +! 2.21.2 Threadprivate Directive + +subroutine host_assoc_fail() + integer :: i + ! ERROR: A variable that appears in a THREADPRIVATE directive must be declared in the scope of a module or have the SAVE attribute, either explicitly or implicitly + !$omp threadprivate(i) + real :: r + ! ERROR: A variable that appears in a THREADPRIVATE directive must be declared in the scope of a module or have the SAVE attribute, either explicitly or implicitly + !$omp threadprivate(r) +contains + subroutine internal() +!$omp parallel + print *, i, r +!$omp end parallel + end subroutine internal +end subroutine host_assoc_fail + +! This sub-test is not supposed to emit a compiler error. +subroutine host_assoc() + integer, save :: i + !$omp threadprivate(i) + real, save :: r + !$omp threadprivate(r) +contains + subroutine internal() +!$omp parallel + print *, i, r +!$omp end parallel + end subroutine internal +end subroutine host_assoc