| ! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp |
| ! OpenMP Version 4.5 |
| ! Various checks with the nesting of BARRIER construct |
| |
| program omp_nest_barrier |
| integer i, k, j |
| k = 0; |
| |
| !$omp do |
| do i = 1, 10 |
| k = k + 1 |
| !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. |
| !$omp barrier |
| j = j -1 |
| end do |
| |
| !$omp do simd |
| do i = 1, 10 |
| k = k + 1 |
| !ERROR: The only OpenMP constructs that can be encountered during execution of a 'SIMD' region are the `ATOMIC` construct, the `LOOP` construct, the `SIMD` construct and the `ORDERED` construct with the `SIMD` clause. |
| !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. |
| !$omp barrier |
| j = j -1 |
| end do |
| |
| !$omp parallel do |
| do i = 1, 10 |
| k = k + 1 |
| !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. |
| !$omp barrier |
| j = j -1 |
| end do |
| |
| !$omp parallel do simd |
| do i = 1, 10 |
| k = k + 1 |
| !ERROR: The only OpenMP constructs that can be encountered during execution of a 'SIMD' region are the `ATOMIC` construct, the `LOOP` construct, the `SIMD` construct and the `ORDERED` construct with the `SIMD` clause. |
| !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. |
| !$omp barrier |
| j = j -1 |
| end do |
| |
| !$omp parallel |
| do i = 1, 10 |
| k = k + 1 |
| !$omp barrier |
| j = j -1 |
| end do |
| !$omp end parallel |
| |
| !$omp task |
| do i = 1, 10 |
| k = k + 1 |
| !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. |
| !$omp barrier |
| j = j -1 |
| end do |
| !$omp end task |
| |
| !$omp taskloop |
| do i = 1, 10 |
| k = k + 1 |
| !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. |
| !$omp barrier |
| j = j -1 |
| end do |
| !$omp end taskloop |
| |
| !$omp critical |
| do i = 1, 10 |
| k = k + 1 |
| !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. |
| !$omp barrier |
| j = j -1 |
| end do |
| !$omp end critical |
| |
| !$omp master |
| do i = 1, 10 |
| k = k + 1 |
| !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. |
| !$omp barrier |
| j = j -1 |
| end do |
| !$omp end master |
| |
| !$omp ordered |
| do i = 1, 10 |
| k = k + 1 |
| !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. |
| !$omp barrier |
| j = j -1 |
| end do |
| !$omp end ordered |
| |
| !$omp ordered |
| do i = 1, 10 |
| !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region. |
| !$omp distribute |
| do k =1, 10 |
| print *, "hello" |
| !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. |
| !$omp barrier |
| j = j -1 |
| end do |
| !$omp end distribute |
| end do |
| !$omp end ordered |
| |
| !$omp master |
| do i = 1, 10 |
| !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region. |
| !$omp distribute |
| do k =1, 10 |
| print *, "hello" |
| !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. |
| !$omp barrier |
| j = j -1 |
| end do |
| !$omp end distribute |
| end do |
| !$omp end master |
| |
| !$omp critical |
| do i = 1, 10 |
| !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region. |
| !$omp distribute |
| do k =1, 10 |
| print *, "hello" |
| !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. |
| !$omp barrier |
| j = j -1 |
| end do |
| !$omp end distribute |
| end do |
| !$omp end critical |
| |
| !$omp taskloop |
| do i = 1, 10 |
| !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region. |
| !$omp distribute |
| do k =1, 10 |
| print *, "hello" |
| !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. |
| !$omp barrier |
| j = j -1 |
| end do |
| !$omp end distribute |
| end do |
| !$omp end taskloop |
| |
| !$omp task |
| do i = 1, 10 |
| !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region. |
| !$omp distribute |
| do k =1, 10 |
| print *, "hello" |
| !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. |
| !$omp barrier |
| j = j -1 |
| end do |
| !$omp end distribute |
| end do |
| !$omp end task |
| |
| end program omp_nest_barrier |