mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			54 lines
		
	
	
		
			921 B
		
	
	
	
		
			Fortran
		
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			921 B
		
	
	
	
		
			Fortran
		
	
	
	
| ! PR fortran/42162
 | |
| ! { dg-do run }
 | |
| 
 | |
| subroutine sub1(k, a)
 | |
|   implicit none
 | |
|   integer :: k, a(3)
 | |
|   !$omp do
 | |
|     do k=1,3
 | |
|       a(k) = a(k) + 1
 | |
|     enddo
 | |
|   !$omp end do
 | |
| end subroutine sub1
 | |
| 
 | |
| subroutine sub2(k, a)
 | |
|   implicit none
 | |
|   integer :: k, a(3)
 | |
|   !$omp do private (k)
 | |
|     do k=1,3
 | |
|       a(k) = a(k) + 1
 | |
|     enddo
 | |
|   !$omp end do
 | |
| end subroutine sub2
 | |
| 
 | |
| subroutine sub3(k, a)
 | |
|   implicit none
 | |
|   integer :: k, a(3)
 | |
|   !$omp do lastprivate (k)
 | |
|     do k=1,3
 | |
|       a(k) = a(k) + 1
 | |
|     enddo
 | |
|   !$omp end do
 | |
| end subroutine sub3
 | |
| 
 | |
| program pr42162
 | |
|   implicit none
 | |
|   integer :: k, a(3), b(3), c(3)
 | |
|   a = 1
 | |
|   b = 2
 | |
|   c = 3
 | |
|   k = 3
 | |
|   !$omp parallel num_threads(3)
 | |
|   call sub1 (k, a)
 | |
|   !$omp end parallel
 | |
|   k = 4
 | |
|   !$omp parallel num_threads(3)
 | |
|   call sub2 (k, b)
 | |
|   !$omp end parallel
 | |
|   k = 10
 | |
|   !$omp parallel num_threads(3)
 | |
|   call sub3 (k, c)
 | |
|   !$omp end parallel
 | |
|   if (k.ne.4.or.any(a.ne.2).or.any(b.ne.3).or.any(c.ne.4)) call abort
 | |
| end
 |