]> oss.titaniummirror.com Git - msp430-gcc.git/blobdiff - libgomp/testsuite/libgomp.fortran/appendix-a/a.40.1.f90
Imported gcc-4.4.3
[msp430-gcc.git] / libgomp / testsuite / libgomp.fortran / appendix-a / a.40.1.f90
diff --git a/libgomp/testsuite/libgomp.fortran/appendix-a/a.40.1.f90 b/libgomp/testsuite/libgomp.fortran/appendix-a/a.40.1.f90
new file mode 100644 (file)
index 0000000..c5ecb3c
--- /dev/null
@@ -0,0 +1,54 @@
+! { dg-do compile }
+! { dg-options "-ffixed-form" }
+        MODULE DATA
+        USE OMP_LIB, ONLY: OMP_NEST_LOCK_KIND
+        TYPE LOCKED_PAIR
+        INTEGER A
+        INTEGER B
+        INTEGER (OMP_NEST_LOCK_KIND) LCK
+        END TYPE
+            END MODULE DATA
+        SUBROUTINE INCR_A(P, A)
+            ! called only from INCR_PAIR, no need to lock
+            USE DATA
+            TYPE(LOCKED_PAIR) :: P
+            INTEGER A
+            P%A = P%A + A
+        END SUBROUTINE INCR_A
+        SUBROUTINE INCR_B(P, B)
+            ! called from both INCR_PAIR and elsewhere,
+            ! so we need a nestable lock
+            USE OMP_LIB       ! or INCLUDE "omp_lib.h"
+            USE DATA
+            TYPE(LOCKED_PAIR) :: P
+            INTEGER B
+            CALL OMP_SET_NEST_LOCK(P%LCK)
+            P%B = P%B + B
+            CALL OMP_UNSET_NEST_LOCK(P%LCK)
+        END SUBROUTINE INCR_B
+        SUBROUTINE INCR_PAIR(P, A, B)
+            USE OMP_LIB         ! or INCLUDE "omp_lib.h"
+            USE DATA
+            TYPE(LOCKED_PAIR) :: P
+            INTEGER A
+            INTEGER B
+        CALL OMP_SET_NEST_LOCK(P%LCK)
+        CALL INCR_A(P, A)
+        CALL INCR_B(P, B)
+        CALL OMP_UNSET_NEST_LOCK(P%LCK)
+      END SUBROUTINE INCR_PAIR
+      SUBROUTINE A40(P)
+        USE OMP_LIB        ! or INCLUDE "omp_lib.h"
+        USE DATA
+        TYPE(LOCKED_PAIR) :: P
+        INTEGER WORK1, WORK2, WORK3
+        EXTERNAL WORK1, WORK2, WORK3
+!$OMP PARALLEL SECTIONS
+!$OMP SECTION
+          CALL INCR_PAIR(P, WORK1(), WORK2())
+!$OMP SECTION
+          CALL INCR_B(P, WORK3())
+!$OMP END PARALLEL SECTIONS
+      END SUBROUTINE A40
+
+! { dg-final { cleanup-modules "data" } }