mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			44 lines
		
	
	
		
			950 B
		
	
	
	
		
			Fortran
		
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			950 B
		
	
	
	
		
			Fortran
		
	
	
	
| ! { dg-do run }
 | |
| 
 | |
|   integer :: a, b, c
 | |
|   a = 1
 | |
|   b = 2
 | |
|   c = 3
 | |
|   call foo
 | |
|   if (a .ne. 7) call abort
 | |
| contains
 | |
|   subroutine foo
 | |
|     use omp_lib
 | |
|     logical :: l
 | |
|     l = .false.
 | |
| !$omp parallel shared (a) private (b) firstprivate (c) &
 | |
| !$omp num_threads (2) reduction (.or.:l)
 | |
|     if (a .ne. 1 .or. c .ne. 3) l = .true.
 | |
| !$omp barrier
 | |
|     if (omp_get_thread_num () .eq. 0) then
 | |
|       a = 4
 | |
|       b = 5
 | |
|       c = 6
 | |
|     end if
 | |
| !$omp barrier
 | |
|     if (omp_get_thread_num () .eq. 1) then
 | |
|       if (a .ne. 4 .or. c .ne. 3) l = .true.
 | |
|       a = 7
 | |
|       b = 8
 | |
|       c = 9
 | |
|     else if (omp_get_num_threads () .eq. 1) then
 | |
|       a = 7
 | |
|     end if
 | |
| !$omp barrier
 | |
|     if (omp_get_thread_num () .eq. 0) then
 | |
|       if (a .ne. 7 .or. b .ne. 5 .or. c .ne. 6) l = .true.
 | |
|     end if
 | |
| !$omp barrier
 | |
|     if (omp_get_thread_num () .eq. 1) then
 | |
|       if (a .ne. 7 .or. b .ne. 8 .or. c .ne. 9) l = .true.
 | |
|     end if
 | |
| !$omp end parallel
 | |
|     if (l) call abort
 | |
|   end subroutine foo
 | |
| end
 |