summaryrefslogtreecommitdiff
path: root/libgomp
diff options
context:
space:
mode:
authorbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>2013-06-26 18:39:06 +0000
committerbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>2013-06-26 18:39:06 +0000
commit21543d4cd558cada630271a0cf3075ad7ce94cbf (patch)
tree08bdb3f3e0a9d0f71e72bb56d9ddb7b916e7dfeb /libgomp
parented0bc1ffb674fe93d0df68654b5bb76869f0bc8c (diff)
downloadgcc-21543d4cd558cada630271a0cf3075ad7ce94cbf.tar.gz
2013-06-26 Basile Starynkevitch <basile@starynkevitch.net>
{{merged with trunk [4.9] svn rev. 196654-200426}} MELT branch merged with trunk rev. 200426 using svnmerge.py [gcc/] 2013-06-26 Basile Starynkevitch <basile@starynkevitch.net> {{merge with trunk [4.9] svn rev. 196654-200426}} * melt-runtime.c (melt_val2passflag): TODO_ggc_collect & TODO_do_not_ggc_collect are conditionalized. * melt/generated/warmelt-first+03.cc: Manually remove calls to MELT_TRACE_EXIT_LOCATION macro. * melt/generated/warmelt-base+03.cc: Ditto. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@200430 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgomp')
-rw-r--r--libgomp/ChangeLog48
-rw-r--r--libgomp/config/posix/ptrlock.h5
-rw-r--r--libgomp/configure.tgt5
-rw-r--r--libgomp/libgomp.texi58
-rw-r--r--libgomp/omp_lib.f90.in64
-rw-r--r--libgomp/testsuite/lib/libgomp.exp21
-rw-r--r--libgomp/testsuite/libgomp.c++/c++.exp3
-rw-r--r--libgomp/testsuite/libgomp.c++/loop-13.C3
-rw-r--r--libgomp/testsuite/libgomp.c++/loop-14.C3
-rw-r--r--libgomp/testsuite/libgomp.c++/loop-15.C3
-rw-r--r--libgomp/testsuite/libgomp.c/c.exp1
-rw-r--r--libgomp/testsuite/libgomp.c/icv-2.c2
-rw-r--r--libgomp/testsuite/libgomp.c/lock-3.c2
-rw-r--r--libgomp/testsuite/libgomp.c/loop-13.c253
-rw-r--r--libgomp/testsuite/libgomp.c/loop-14.c253
-rw-r--r--libgomp/testsuite/libgomp.c/loop-15.c253
-rw-r--r--libgomp/testsuite/libgomp.c/pr48591.c2
-rw-r--r--libgomp/testsuite/libgomp.fortran/fortran.exp2
-rw-r--r--libgomp/testsuite/libgomp.graphite/graphite.exp1
19 files changed, 904 insertions, 78 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index b0dc764c9c1..9a575739e7c 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,51 @@
+2013-06-20 Iain Sandoe <iain@codesourcery.com>
+ Cesar Philippidis <cesar@codesourcery.com>
+
+ * testsuite/lib/libgomp.exp: Reorder lib loads into dependency order.
+ Do not load_gcc_lib gcc-dg.exp and add a comment as to why.
+ * testsuite/libgomp.c/c.exp: load_gcc_lib gcc-dg.exp.
+ * testsuite/libgomp.fortran/fortran.exp: Likewise.
+ * testsuite/libgomp.graphite/graphite.exp: Likewise.
+ * testsuite/libgomp.c++/c++.exp: load_gcc_lib gcc-dg.exp.
+ Use dg-runtest rather than gfortran-dg-runtest.
+
+2013-06-10 Thomas Schwinge <thomas@codesourcery.com>
+
+ * testsuite/libgomp.c/icv-2.c: Extend current handling of
+ Linux-based x86 systems to cover all GNU systems.
+ * testsuite/libgomp.c/lock-3.c: Likewise.
+ * testsuite/libgomp.c/pr48591.c: Likewise.
+
+2013-06-06 Thomas Schwinge <thomas@codesourcery.com>
+
+ * configure.tgt (XCFLAGS): Add -ftls-model=initial-exec for
+ GNU/Hurd, as done for Linux-based systems.
+
+ * config/posix/ptrlock.h: Fix comment.
+
+2013-05-27 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/57423
+ * libgomp.texi (omp_set_dynamic, omp_set_nested, omp_set_nested,
+ omp_set_num_threads, omp_init_lock, omp_set_lock, omp_test_lock,
+ omp_unset_lock, omp_destroy_lock, omp_init_nest_lock,
+ omp_set_nest_lock, omp_test_nest_lock, omp_unset_nest_lock,
+ omp_destroy_nest_lock): Correct arguments to match the one in
+ the OpenMP spec.
+ * omp_lib.f90.in (omp_init_lock, omp_init_nest_lock, omp_destroy_lock
+ omp_destroy_nest_lock, omp_set_lock, omp_set_nest_lock, omp_unset_lock,
+ omp_unset_nest_lock, omp_set_dynamic, omp_set_nested,
+ omp_set_num_threads, omp_test_lock, omp_test_nest_lock): Ditto.
+
+2013-05-16 Jakub Jelinek <jakub@redhat.com>
+
+ * testsuite/libgomp.c/loop-13.c: New test.
+ * testsuite/libgomp.c/loop-14.c: New test.
+ * testsuite/libgomp.c/loop-15.c: New test.
+ * testsuite/libgomp.c++/loop-13.C: New test.
+ * testsuite/libgomp.c++/loop-14.C: New test.
+ * testsuite/libgomp.c++/loop-15.C: New test.
+
2013-02-06 Jakub Jelinek <jakub@redhat.com>
PR middle-end/56217
diff --git a/libgomp/config/posix/ptrlock.h b/libgomp/config/posix/ptrlock.h
index eec4e19df7c..76c2deb173d 100644
--- a/libgomp/config/posix/ptrlock.h
+++ b/libgomp/config/posix/ptrlock.h
@@ -22,9 +22,8 @@
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
-/* This is a Linux specific implementation of a mutex synchronization
- mechanism for libgomp. This type is private to the library. This
- implementation uses atomic instructions and the futex syscall. */
+/* This is a generic POSIX implementation of a mutex synchronization
+ mechanism for libgomp. This type is private to the library. */
#ifndef GOMP_PTRLOCK_H
#define GOMP_PTRLOCK_H 1
diff --git a/libgomp/configure.tgt b/libgomp/configure.tgt
index 2eecc93a349..8b1841792d4 100644
--- a/libgomp/configure.tgt
+++ b/libgomp/configure.tgt
@@ -14,7 +14,10 @@
if test $gcc_cv_have_tls = yes ; then
case "${target}" in
- *-*-linux*)
+ *-*-k*bsd*-gnu*)
+ ;;
+
+ *-*-linux* | *-*-gnu*)
XCFLAGS="${XCFLAGS} -ftls-model=initial-exec"
;;
esac
diff --git a/libgomp/libgomp.texi b/libgomp/libgomp.texi
index 40c3830e599..2985128f8ac 100644
--- a/libgomp/libgomp.texi
+++ b/libgomp/libgomp.texi
@@ -601,13 +601,13 @@ adjustment of team sizes and @code{false} disables it.
@item @emph{C/C++}:
@multitable @columnfractions .20 .80
-@item @emph{Prototype}: @tab @code{void omp_set_dynamic(int set);}
+@item @emph{Prototype}: @tab @code{void omp_set_dynamic(int dynamic_threads);}
@end multitable
@item @emph{Fortran}:
@multitable @columnfractions .20 .80
-@item @emph{Interface}: @tab @code{subroutine omp_set_dynamic(set)}
-@item @tab @code{logical, intent(in) :: set}
+@item @emph{Interface}: @tab @code{subroutine omp_set_dynamic(dynamic_threads)}
+@item @tab @code{logical, intent(in) :: dynamic_threads}
@end multitable
@item @emph{See also}:
@@ -657,13 +657,13 @@ dynamic adjustment of team sizes and @code{false} disables it.
@item @emph{C/C++}:
@multitable @columnfractions .20 .80
-@item @emph{Prototype}: @tab @code{void omp_set_nested(int set);}
+@item @emph{Prototype}: @tab @code{void omp_set_nested(int nested);}
@end multitable
@item @emph{Fortran}:
@multitable @columnfractions .20 .80
-@item @emph{Interface}: @tab @code{subroutine omp_set_nested(set)}
-@item @tab @code{logical, intent(in) :: set}
+@item @emph{Interface}: @tab @code{subroutine omp_set_nested(nested)}
+@item @tab @code{logical, intent(in) :: nested}
@end multitable
@item @emph{See also}:
@@ -685,13 +685,13 @@ argument of @code{omp_set_num_threads} shall be a positive integer.
@item @emph{C/C++}:
@multitable @columnfractions .20 .80
-@item @emph{Prototype}: @tab @code{void omp_set_num_threads(int n);}
+@item @emph{Prototype}: @tab @code{void omp_set_num_threads(int num_threads);}
@end multitable
@item @emph{Fortran}:
@multitable @columnfractions .20 .80
-@item @emph{Interface}: @tab @code{subroutine omp_set_num_threads(n)}
-@item @tab @code{integer, intent(in) :: n}
+@item @emph{Interface}: @tab @code{subroutine omp_set_num_threads(num_threads)}
+@item @tab @code{integer, intent(in) :: num_threads}
@end multitable
@item @emph{See also}:
@@ -750,8 +750,8 @@ an unlocked state.
@item @emph{Fortran}:
@multitable @columnfractions .20 .80
-@item @emph{Interface}: @tab @code{subroutine omp_init_lock(lock)}
-@item @tab @code{integer(omp_lock_kind), intent(out) :: lock}
+@item @emph{Interface}: @tab @code{subroutine omp_init_lock(svar)}
+@item @tab @code{integer(omp_lock_kind), intent(out) :: svar}
@end multitable
@item @emph{See also}:
@@ -779,8 +779,8 @@ a deadlock occurs.
@item @emph{Fortran}:
@multitable @columnfractions .20 .80
-@item @emph{Interface}: @tab @code{subroutine omp_set_lock(lock)}
-@item @tab @code{integer(omp_lock_kind), intent(inout) :: lock}
+@item @emph{Interface}: @tab @code{subroutine omp_set_lock(svar)}
+@item @tab @code{integer(omp_lock_kind), intent(inout) :: svar}
@end multitable
@item @emph{See also}:
@@ -809,8 +809,8 @@ does not block if the lock is not available. This function returns
@item @emph{Fortran}:
@multitable @columnfractions .20 .80
-@item @emph{Interface}: @tab @code{logical function omp_test_lock(lock)}
-@item @tab @code{integer(omp_lock_kind), intent(inout) :: lock}
+@item @emph{Interface}: @tab @code{logical function omp_test_lock(svar)}
+@item @tab @code{integer(omp_lock_kind), intent(inout) :: svar}
@end multitable
@item @emph{See also}:
@@ -839,8 +839,8 @@ again, set the lock to itself.
@item @emph{Fortran}:
@multitable @columnfractions .20 .80
-@item @emph{Interface}: @tab @code{subroutine omp_unset_lock(lock)}
-@item @tab @code{integer(omp_lock_kind), intent(inout) :: lock}
+@item @emph{Interface}: @tab @code{subroutine omp_unset_lock(svar)}
+@item @tab @code{integer(omp_lock_kind), intent(inout) :: svar}
@end multitable
@item @emph{See also}:
@@ -866,8 +866,8 @@ in the unlocked state.
@item @emph{Fortran}:
@multitable @columnfractions .20 .80
-@item @emph{Interface}: @tab @code{subroutine omp_destroy_lock(lock)}
-@item @tab @code{integer(omp_lock_kind), intent(inout) :: lock}
+@item @emph{Interface}: @tab @code{subroutine omp_destroy_lock(svar)}
+@item @tab @code{integer(omp_lock_kind), intent(inout) :: svar}
@end multitable
@item @emph{See also}:
@@ -893,8 +893,8 @@ an unlocked state and the nesting count is set to zero.
@item @emph{Fortran}:
@multitable @columnfractions .20 .80
-@item @emph{Interface}: @tab @code{subroutine omp_init_nest_lock(lock)}
-@item @tab @code{integer(omp_nest_lock_kind), intent(out) :: lock}
+@item @emph{Interface}: @tab @code{subroutine omp_init_nest_lock(nvar)}
+@item @tab @code{integer(omp_nest_lock_kind), intent(out) :: nvar}
@end multitable
@item @emph{See also}:
@@ -921,8 +921,8 @@ nesting count for the lock is incremented.
@item @emph{Fortran}:
@multitable @columnfractions .20 .80
-@item @emph{Interface}: @tab @code{subroutine omp_set_nest_lock(lock)}
-@item @tab @code{integer(omp_nest_lock_kind), intent(inout) :: lock}
+@item @emph{Interface}: @tab @code{subroutine omp_set_nest_lock(nvar)}
+@item @tab @code{integer(omp_nest_lock_kind), intent(inout) :: nvar}
@end multitable
@item @emph{See also}:
@@ -951,8 +951,8 @@ is returned. Otherwise, the return value equals zero.
@item @emph{Fortran}:
@multitable @columnfractions .20 .80
-@item @emph{Interface}: @tab @code{logical function omp_test_nest_lock(lock)}
-@item @tab @code{integer(omp_nest_lock_kind), intent(inout) :: lock}
+@item @emph{Interface}: @tab @code{logical function omp_test_nest_lock(nvar)}
+@item @tab @code{integer(omp_nest_lock_kind), intent(inout) :: nvar}
@end multitable
@@ -982,8 +982,8 @@ one of them is chosen to, again, set the lock to itself.
@item @emph{Fortran}:
@multitable @columnfractions .20 .80
-@item @emph{Interface}: @tab @code{subroutine omp_unset_nest_lock(lock)}
-@item @tab @code{integer(omp_nest_lock_kind), intent(inout) :: lock}
+@item @emph{Interface}: @tab @code{subroutine omp_unset_nest_lock(nvar)}
+@item @tab @code{integer(omp_nest_lock_kind), intent(inout) :: nvar}
@end multitable
@item @emph{See also}:
@@ -1009,8 +1009,8 @@ in the unlocked state and its nesting count must equal zero.
@item @emph{Fortran}:
@multitable @columnfractions .20 .80
-@item @emph{Interface}: @tab @code{subroutine omp_destroy_nest_lock(lock)}
-@item @tab @code{integer(omp_nest_lock_kind), intent(inout) :: lock}
+@item @emph{Interface}: @tab @code{subroutine omp_destroy_nest_lock(nvar)}
+@item @tab @code{integer(omp_nest_lock_kind), intent(inout) :: nvar}
@end multitable
@item @emph{See also}:
diff --git a/libgomp/omp_lib.f90.in b/libgomp/omp_lib.f90.in
index c6108e1c384..c9bc5fd003a 100644
--- a/libgomp/omp_lib.f90.in
+++ b/libgomp/omp_lib.f90.in
@@ -39,85 +39,85 @@
integer (omp_sched_kind), parameter :: omp_sched_auto = 4
interface
- subroutine omp_init_lock (lock)
+ subroutine omp_init_lock (svar)
use omp_lib_kinds
- integer (omp_lock_kind), intent (out) :: lock
+ integer (omp_lock_kind), intent (out) :: svar
end subroutine omp_init_lock
end interface
interface
- subroutine omp_init_nest_lock (lock)
+ subroutine omp_init_nest_lock (nvar)
use omp_lib_kinds
- integer (omp_nest_lock_kind), intent (out) :: lock
+ integer (omp_nest_lock_kind), intent (out) :: nvar
end subroutine omp_init_nest_lock
end interface
interface
- subroutine omp_destroy_lock (lock)
+ subroutine omp_destroy_lock (svar)
use omp_lib_kinds
- integer (omp_lock_kind), intent (inout) :: lock
+ integer (omp_lock_kind), intent (inout) :: svar
end subroutine omp_destroy_lock
end interface
interface
- subroutine omp_destroy_nest_lock (lock)
+ subroutine omp_destroy_nest_lock (nvar)
use omp_lib_kinds
- integer (omp_nest_lock_kind), intent (inout) :: lock
+ integer (omp_nest_lock_kind), intent (inout) :: nvar
end subroutine omp_destroy_nest_lock
end interface
interface
- subroutine omp_set_lock (lock)
+ subroutine omp_set_lock (svar)
use omp_lib_kinds
- integer (omp_lock_kind), intent (inout) :: lock
+ integer (omp_lock_kind), intent (inout) :: svar
end subroutine omp_set_lock
end interface
interface
- subroutine omp_set_nest_lock (lock)
+ subroutine omp_set_nest_lock (nvar)
use omp_lib_kinds
- integer (omp_nest_lock_kind), intent (inout) :: lock
+ integer (omp_nest_lock_kind), intent (inout) :: nvar
end subroutine omp_set_nest_lock
end interface
interface
- subroutine omp_unset_lock (lock)
+ subroutine omp_unset_lock (svar)
use omp_lib_kinds
- integer (omp_lock_kind), intent (inout) :: lock
+ integer (omp_lock_kind), intent (inout) :: svar
end subroutine omp_unset_lock
end interface
interface
- subroutine omp_unset_nest_lock (lock)
+ subroutine omp_unset_nest_lock (nvar)
use omp_lib_kinds
- integer (omp_nest_lock_kind), intent (inout) :: lock
+ integer (omp_nest_lock_kind), intent (inout) :: nvar
end subroutine omp_unset_nest_lock
end interface
interface omp_set_dynamic
- subroutine omp_set_dynamic (set)
- logical (4), intent (in) :: set
+ subroutine omp_set_dynamic (dynamic_threads)
+ logical (4), intent (in) :: dynamic_threads
end subroutine omp_set_dynamic
- subroutine omp_set_dynamic_8 (set)
- logical (8), intent (in) :: set
+ subroutine omp_set_dynamic_8 (dynamic_threads)
+ logical (8), intent (in) :: dynamic_threads
end subroutine omp_set_dynamic_8
end interface
interface omp_set_nested
- subroutine omp_set_nested (set)
- logical (4), intent (in) :: set
+ subroutine omp_set_nested (nested)
+ logical (4), intent (in) :: nested
end subroutine omp_set_nested
- subroutine omp_set_nested_8 (set)
- logical (8), intent (in) :: set
+ subroutine omp_set_nested_8 (nested)
+ logical (8), intent (in) :: nested
end subroutine omp_set_nested_8
end interface
interface omp_set_num_threads
- subroutine omp_set_num_threads (set)
- integer (4), intent (in) :: set
+ subroutine omp_set_num_threads (num_threads)
+ integer (4), intent (in) :: num_threads
end subroutine omp_set_num_threads
- subroutine omp_set_num_threads_8 (set)
- integer (8), intent (in) :: set
+ subroutine omp_set_num_threads_8 (num_threads)
+ integer (8), intent (in) :: num_threads
end subroutine omp_set_num_threads_8
end interface
@@ -143,10 +143,10 @@
end interface
interface
- function omp_test_lock (lock)
+ function omp_test_lock (svar)
use omp_lib_kinds
logical (4) :: omp_test_lock
- integer (omp_lock_kind), intent (inout) :: lock
+ integer (omp_lock_kind), intent (inout) :: svar
end function omp_test_lock
end interface
@@ -179,10 +179,10 @@
end interface
interface
- function omp_test_nest_lock (lock)
+ function omp_test_nest_lock (nvar)
use omp_lib_kinds
integer (4) :: omp_test_nest_lock
- integer (omp_nest_lock_kind), intent (inout) :: lock
+ integer (omp_nest_lock_kind), intent (inout) :: nvar
end function omp_test_nest_lock
end interface
diff --git a/libgomp/testsuite/lib/libgomp.exp b/libgomp/testsuite/lib/libgomp.exp
index cd561bf1576..72daa7e3a3e 100644
--- a/libgomp/testsuite/lib/libgomp.exp
+++ b/libgomp/testsuite/lib/libgomp.exp
@@ -9,24 +9,27 @@ proc load_gcc_lib { filename } {
}
load_lib dg.exp
-load_gcc_lib file-format.exp
+
+# Required to use gcc-dg.exp - however, the latter should NOT be
+# loaded until ${tool}_target_compile is defined since it uses that
+# to determine default LTO options.
+
+load_gcc_lib prune.exp
+load_gcc_lib target-libpath.exp
+load_gcc_lib wrapper.exp
+load_gcc_lib gcc-defs.exp
+load_gcc_lib timeout.exp
load_gcc_lib target-supports.exp
+load_gcc_lib file-format.exp
load_gcc_lib target-supports-dg.exp
load_gcc_lib scanasm.exp
load_gcc_lib scandump.exp
load_gcc_lib scanrtl.exp
load_gcc_lib scantree.exp
load_gcc_lib scanipa.exp
-load_gcc_lib prune.exp
-load_gcc_lib target-libpath.exp
-load_gcc_lib wrapper.exp
-load_gcc_lib gcc-defs.exp
-load_gcc_lib torture-options.exp
-load_gcc_lib timeout.exp
load_gcc_lib timeout-dg.exp
+load_gcc_lib torture-options.exp
load_gcc_lib fortran-modules.exp
-load_gcc_lib gcc-dg.exp
-load_gcc_lib gfortran-dg.exp
set dg-do-what-default run
diff --git a/libgomp/testsuite/libgomp.c++/c++.exp b/libgomp/testsuite/libgomp.c++/c++.exp
index decda3d1a12..b3363062ae8 100644
--- a/libgomp/testsuite/libgomp.c++/c++.exp
+++ b/libgomp/testsuite/libgomp.c++/c++.exp
@@ -1,4 +1,5 @@
load_lib libgomp-dg.exp
+load_gcc_lib gcc-dg.exp
global shlib_ext
@@ -53,7 +54,7 @@ if { $lang_test_file_found } {
}
# Main loop.
- gfortran-dg-runtest $tests $libstdcxx_includes
+ dg-runtest $tests "" $libstdcxx_includes
}
# All done.
diff --git a/libgomp/testsuite/libgomp.c++/loop-13.C b/libgomp/testsuite/libgomp.c++/loop-13.C
new file mode 100644
index 00000000000..31572be0f26
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c++/loop-13.C
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+#include "../libgomp.c/loop-13.c"
diff --git a/libgomp/testsuite/libgomp.c++/loop-14.C b/libgomp/testsuite/libgomp.c++/loop-14.C
new file mode 100644
index 00000000000..ba2856ac105
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c++/loop-14.C
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+#include "../libgomp.c/loop-14.c"
diff --git a/libgomp/testsuite/libgomp.c++/loop-15.C b/libgomp/testsuite/libgomp.c++/loop-15.C
new file mode 100644
index 00000000000..9bde48e3ac8
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c++/loop-15.C
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+#include "../libgomp.c/loop-15.c"
diff --git a/libgomp/testsuite/libgomp.c/c.exp b/libgomp/testsuite/libgomp.c/c.exp
index 980bb526f3f..7dfdf8bde78 100644
--- a/libgomp/testsuite/libgomp.c/c.exp
+++ b/libgomp/testsuite/libgomp.c/c.exp
@@ -7,6 +7,7 @@ if [info exists lang_test_file] then {
}
load_lib libgomp-dg.exp
+load_gcc_lib gcc-dg.exp
# If a testcase doesn't have special options, use these.
if ![info exists DEFAULT_CFLAGS] then {
diff --git a/libgomp/testsuite/libgomp.c/icv-2.c b/libgomp/testsuite/libgomp.c/icv-2.c
index 326f8eb404a..3a80d6123a8 100644
--- a/libgomp/testsuite/libgomp.c/icv-2.c
+++ b/libgomp/testsuite/libgomp.c/icv-2.c
@@ -1,4 +1,4 @@
-/* { dg-do run { target *-*-linux* } } */
+/* { dg-do run { target *-*-linux* *-*-gnu* } } */
#ifndef _GNU_SOURCE
#define _GNU_SOURCE 1
diff --git a/libgomp/testsuite/libgomp.c/lock-3.c b/libgomp/testsuite/libgomp.c/lock-3.c
index 1fc83726d18..02c90b98a87 100644
--- a/libgomp/testsuite/libgomp.c/lock-3.c
+++ b/libgomp/testsuite/libgomp.c/lock-3.c
@@ -1,4 +1,4 @@
-/* { dg-do run { target *-*-linux* } } */
+/* { dg-do run { target *-*-linux* *-*-gnu* } } */
#ifndef _GNU_SOURCE
#define _GNU_SOURCE 1
diff --git a/libgomp/testsuite/libgomp.c/loop-13.c b/libgomp/testsuite/libgomp.c/loop-13.c
new file mode 100644
index 00000000000..997c628fae6
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c/loop-13.c
@@ -0,0 +1,253 @@
+/* { dg-do run } */
+
+volatile int ji = 100, ki = 2;
+volatile unsigned int ju = 100, ku = 2;
+volatile long long int jll = 100, kll = 2;
+volatile unsigned long long int jull = 100, kull = 2;
+unsigned long long l;
+
+void
+f0 (void)
+{
+ int i, j, k;
+ unsigned int j2, k2;
+ #pragma omp for reduction(+: l)
+ for (i = ji; i < ki; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l)
+ for (i = ji; i < ki; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3)
+ for (j = 0; j < 4; j++)
+ for (i = ji; i < ki; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3)
+ for (j = 0; j < 4; j++)
+ for (i = ji; i < ki; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = ji; i < ki; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = ji; i < ki; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3)
+ for (j = 0; j < 4; j++)
+ for (i = ji; i < ki; i++)
+ for (k = ki + 10; k < ji - 10; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3)
+ for (j = ki + 10; j < ji - 10; j++)
+ for (i = ji; i < ki; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+}
+
+void
+f1 (void)
+{
+ unsigned int i, j, k;
+ int j2, k2;
+ #pragma omp for reduction(+: l)
+ for (i = ju; i < ku; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l)
+ for (i = ju; i < ku; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3)
+ for (j = 0; j < 4; j++)
+ for (i = ju; i < ku; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3)
+ for (j = 0; j < 4; j++)
+ for (i = ju; i < ku; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = ju; i < ku; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = ju; i < ku; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3)
+ for (j = 0; j < 4; j++)
+ for (i = ju; i < ku; i++)
+ for (k = ku; k < ju; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3)
+ for (j = ku; j < ju; j++)
+ for (i = ju; i < ku; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+}
+
+void
+f2 (void)
+{
+ long long int i, j, k;
+ unsigned long long int j2, k2;
+ #pragma omp for reduction(+: l)
+ for (i = jll; i < kll; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l)
+ for (i = jll; i < kll; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3)
+ for (j = 0; j < 4; j++)
+ for (i = jll; i < kll; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3)
+ for (j = 0; j < 4; j++)
+ for (i = jll; i < kll; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = jll; i < kll; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = jll; i < kll; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3)
+ for (j = 0; j < 4; j++)
+ for (i = jll; i < kll; i++)
+ for (k = kll; k < jll; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3)
+ for (j = kll; j < jll; j++)
+ for (i = jll; i < kll; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+}
+
+void
+f3 (void)
+{
+ unsigned long long int i, j, k;
+ long long int j2, k2;
+ #pragma omp for reduction(+: l)
+ for (i = jull; i < kull; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l)
+ for (i = jull; i < kull; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3)
+ for (j = 0; j < 4; j++)
+ for (i = jull; i < kull; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3)
+ for (j = 0; j < 4; j++)
+ for (i = jull; i < kull; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = jull; i < kull; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = jull; i < kull; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3)
+ for (j = 0; j < 4; j++)
+ for (i = jull; i < kull; i++)
+ for (k = kull; k < jull; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3)
+ for (j = kull; j < jull; j++)
+ for (i = jull; i < kull; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+}
+
+int
+main ()
+{
+ f0 ();
+ f1 ();
+ f2 ();
+ f3 ();
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/loop-14.c b/libgomp/testsuite/libgomp.c/loop-14.c
new file mode 100644
index 00000000000..b8a163c3cc7
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c/loop-14.c
@@ -0,0 +1,253 @@
+/* { dg-do run } */
+
+volatile int ji = 100, ki = 2;
+volatile unsigned int ju = 100, ku = 2;
+volatile long long int jll = 100, kll = 2;
+volatile unsigned long long int jull = 100, kull = 2;
+unsigned long long l;
+
+void
+f0 (void)
+{
+ int i, j, k;
+ unsigned int j2, k2;
+ #pragma omp for reduction(+: l) schedule(static, 2)
+ for (i = ji; i < ki; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) schedule(static, 2)
+ for (i = ji; i < ki; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j = 0; j < 4; j++)
+ for (i = ji; i < ki; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j = 0; j < 4; j++)
+ for (i = ji; i < ki; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = ji; i < ki; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = ji; i < ki; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j = 0; j < 4; j++)
+ for (i = ji; i < ki; i++)
+ for (k = ki + 10; k < ji - 10; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j = ki + 10; j < ji - 10; j++)
+ for (i = ji; i < ki; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+}
+
+void
+f1 (void)
+{
+ unsigned int i, j, k;
+ int j2, k2;
+ #pragma omp for reduction(+: l) schedule(static, 2)
+ for (i = ju; i < ku; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) schedule(static, 2)
+ for (i = ju; i < ku; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j = 0; j < 4; j++)
+ for (i = ju; i < ku; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j = 0; j < 4; j++)
+ for (i = ju; i < ku; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = ju; i < ku; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = ju; i < ku; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j = 0; j < 4; j++)
+ for (i = ju; i < ku; i++)
+ for (k = ku; k < ju; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j = ku; j < ju; j++)
+ for (i = ju; i < ku; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+}
+
+void
+f2 (void)
+{
+ long long int i, j, k;
+ unsigned long long int j2, k2;
+ #pragma omp for reduction(+: l) schedule(static, 2)
+ for (i = jll; i < kll; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) schedule(static, 2)
+ for (i = jll; i < kll; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j = 0; j < 4; j++)
+ for (i = jll; i < kll; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j = 0; j < 4; j++)
+ for (i = jll; i < kll; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = jll; i < kll; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = jll; i < kll; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j = 0; j < 4; j++)
+ for (i = jll; i < kll; i++)
+ for (k = kll; k < jll; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j = kll; j < jll; j++)
+ for (i = jll; i < kll; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+}
+
+void
+f3 (void)
+{
+ unsigned long long int i, j, k;
+ long long int j2, k2;
+ #pragma omp for reduction(+: l) schedule(static, 2)
+ for (i = jull; i < kull; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) schedule(static, 2)
+ for (i = jull; i < kull; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j = 0; j < 4; j++)
+ for (i = jull; i < kull; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j = 0; j < 4; j++)
+ for (i = jull; i < kull; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = jull; i < kull; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = jull; i < kull; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j = 0; j < 4; j++)
+ for (i = jull; i < kull; i++)
+ for (k = kull; k < jull; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(static, 2)
+ for (j = kull; j < jull; j++)
+ for (i = jull; i < kull; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+}
+
+int
+main ()
+{
+ f0 ();
+ f1 ();
+ f2 ();
+ f3 ();
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/loop-15.c b/libgomp/testsuite/libgomp.c/loop-15.c
new file mode 100644
index 00000000000..e7cf3fc4699
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c/loop-15.c
@@ -0,0 +1,253 @@
+/* { dg-do run } */
+
+volatile int ji = 100, ki = 2;
+volatile unsigned int ju = 100, ku = 2;
+volatile long long int jll = 100, kll = 2;
+volatile unsigned long long int jull = 100, kull = 2;
+unsigned long long l;
+
+void
+f0 (void)
+{
+ int i, j, k;
+ unsigned int j2, k2;
+ #pragma omp for reduction(+: l) schedule(runtime)
+ for (i = ji; i < ki; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) schedule(runtime)
+ for (i = ji; i < ki; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3) schedule(runtime)
+ for (j = 0; j < 4; j++)
+ for (i = ji; i < ki; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(runtime)
+ for (j = 0; j < 4; j++)
+ for (i = ji; i < ki; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3) schedule(runtime)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = ji; i < ki; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(runtime)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = ji; i < ki; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(runtime)
+ for (j = 0; j < 4; j++)
+ for (i = ji; i < ki; i++)
+ for (k = ki + 10; k < ji - 10; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(runtime)
+ for (j = ki + 10; j < ji - 10; j++)
+ for (i = ji; i < ki; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+}
+
+void
+f1 (void)
+{
+ unsigned int i, j, k;
+ int j2, k2;
+ #pragma omp for reduction(+: l) schedule(runtime)
+ for (i = ju; i < ku; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) schedule(runtime)
+ for (i = ju; i < ku; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3) schedule(runtime)
+ for (j = 0; j < 4; j++)
+ for (i = ju; i < ku; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(runtime)
+ for (j = 0; j < 4; j++)
+ for (i = ju; i < ku; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3) schedule(runtime)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = ju; i < ku; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(runtime)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = ju; i < ku; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(runtime)
+ for (j = 0; j < 4; j++)
+ for (i = ju; i < ku; i++)
+ for (k = ku; k < ju; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(runtime)
+ for (j = ku; j < ju; j++)
+ for (i = ju; i < ku; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+}
+
+void
+f2 (void)
+{
+ long long int i, j, k;
+ unsigned long long int j2, k2;
+ #pragma omp for reduction(+: l) schedule(runtime)
+ for (i = jll; i < kll; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) schedule(runtime)
+ for (i = jll; i < kll; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3) schedule(runtime)
+ for (j = 0; j < 4; j++)
+ for (i = jll; i < kll; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(runtime)
+ for (j = 0; j < 4; j++)
+ for (i = jll; i < kll; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3) schedule(runtime)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = jll; i < kll; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(runtime)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = jll; i < kll; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(runtime)
+ for (j = 0; j < 4; j++)
+ for (i = jll; i < kll; i++)
+ for (k = kll; k < jll; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(runtime)
+ for (j = kll; j < jll; j++)
+ for (i = jll; i < kll; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+}
+
+void
+f3 (void)
+{
+ unsigned long long int i, j, k;
+ long long int j2, k2;
+ #pragma omp for reduction(+: l) schedule(runtime)
+ for (i = jull; i < kull; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) schedule(runtime)
+ for (i = jull; i < kull; i++)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3) schedule(runtime)
+ for (j = 0; j < 4; j++)
+ for (i = jull; i < kull; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(runtime)
+ for (j = 0; j < 4; j++)
+ for (i = jull; i < kull; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp for reduction(+: l) collapse(3) schedule(runtime)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = jull; i < kull; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(runtime)
+ for (j2 = 0; j2 < 4; j2++)
+ for (i = jull; i < kull; i++)
+ for (k2 = 0; k2 < 5; k2 += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(runtime)
+ for (j = 0; j < 4; j++)
+ for (i = jull; i < kull; i++)
+ for (k = kull; k < jull; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+ #pragma omp parallel for reduction(+: l) collapse(3) schedule(runtime)
+ for (j = kull; j < jull; j++)
+ for (i = jull; i < kull; i++)
+ for (k = 0; k < 5; k += 2)
+ l++;
+ if (l != 0)
+ __builtin_abort ();
+}
+
+int
+main ()
+{
+ f0 ();
+ f1 ();
+ f2 ();
+ f3 ();
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/pr48591.c b/libgomp/testsuite/libgomp.c/pr48591.c
index 18dfd7f47be..230439d2f30 100644
--- a/libgomp/testsuite/libgomp.c/pr48591.c
+++ b/libgomp/testsuite/libgomp.c/pr48591.c
@@ -1,5 +1,5 @@
/* PR middle-end/48591 */
-/* { dg-do run { target i?86-*-linux* x86_64-*-linux* ia64-*-linux* } } */
+/* { dg-do run { target i?86-*-linux* i?86-*-gnu* x86_64-*-linux* ia64-*-linux* } } */
/* { dg-options "-fopenmp" } */
extern void abort (void);
diff --git a/libgomp/testsuite/libgomp.fortran/fortran.exp b/libgomp/testsuite/libgomp.fortran/fortran.exp
index 40ac8409762..b7fef293a22 100644
--- a/libgomp/testsuite/libgomp.fortran/fortran.exp
+++ b/libgomp/testsuite/libgomp.fortran/fortran.exp
@@ -1,4 +1,6 @@
load_lib libgomp-dg.exp
+load_gcc_lib gcc-dg.exp
+load_gcc_lib gfortran-dg.exp
global shlib_ext
global ALWAYS_CFLAGS
diff --git a/libgomp/testsuite/libgomp.graphite/graphite.exp b/libgomp/testsuite/libgomp.graphite/graphite.exp
index e676ad3c75b..08aa5095cf9 100644
--- a/libgomp/testsuite/libgomp.graphite/graphite.exp
+++ b/libgomp/testsuite/libgomp.graphite/graphite.exp
@@ -23,6 +23,7 @@ if [info exists lang_test_file] then {
}
load_lib libgomp-dg.exp
+load_gcc_lib gcc-dg.exp
if ![check_effective_target_pthread] {
return