aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog95
-rw-r--r--gcc/testsuite/g++.dg/cdce3.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/enum1.C2
-rw-r--r--gcc/testsuite/g++.dg/expr/unary3.C11
-rw-r--r--gcc/testsuite/g++.dg/other/gc4.C14
-rw-r--r--gcc/testsuite/g++.dg/parse/enum5.C17
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/limits-fndefn.c1
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr41163.c10
-rw-r--r--gcc/testsuite/gcc.dg/builtins-10.c4
-rw-r--r--gcc/testsuite/gcc.dg/builtins-config.h6
-rw-r--r--gcc/testsuite/gcc.dg/pr41123.c46
-rw-r--r--gcc/testsuite/gcc.dg/torture/builtin-power-1.c6
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr41094.c19
-rw-r--r--gcc/testsuite/gcc.target/i386/pr40718.c36
-rw-r--r--gcc/testsuite/gfortran.dg/c_f_pointer_tests_4.f9015
-rw-r--r--gcc/testsuite/gfortran.dg/intrinsic_5.f9013
-rw-r--r--gcc/testsuite/gfortran.dg/pr41126.f906
-rw-r--r--gcc/testsuite/gfortran.dg/pr41162.f5
-rw-r--r--gcc/testsuite/gfortran.dg/proc_ptr_25.f9036
-rw-r--r--gcc/testsuite/gfortran.dg/proc_ptr_comp_18.f9033
-rw-r--r--gcc/testsuite/gfortran.dg/proc_ptr_comp_19.f9032
-rw-r--r--gcc/testsuite/gfortran.dg/use_only_4.f9034
-rw-r--r--gcc/testsuite/lib/target-supports.exp3
23 files changed, 445 insertions, 17 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d7c8292ad73..352ab86d5ab 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,98 @@
+2009-08-31 Jason Merrill <jason@redhat.com>
+
+ PR c++/41127
+ * g++.dg/parse/enum5.C: New.
+ * g++.dg/cpp0x/enum1.C: Adjust expected error.
+
+2009-08-31 Gerald Pfeifer <gerald@pfeifer.com>
+
+ * gcc.dg/builtins-config.h (HAVE_C99_RUNTIME): Do not define
+ for FreeBSD.
+
+2009-08-29 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backport from mainline:
+ 2009-08-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR fortran/41162
+ * gfortran.dg/pr41162.f: New.
+
+ 2009-08-26 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/41163
+ * gcc.c-torture/compile/pr41163.c: New testcase.
+
+ 2009-08-25 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/41139
+ * gfortran.dg/proc_ptr_25.f90: New.
+ * gfortran.dg/proc_ptr_comp_18.f90: New.
+ * gfortran.dg/proc_ptr_comp_19.f90: New.
+
+ 2009-08-20 Michael Matz <matz@suse.de>
+
+ PR fortran/41126
+ * gfortran.dg/pr41126.f90: New test.
+
+ 2009-08-20 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/41121
+ * gfortran.dg/intrinsic_5.f90: New.
+
+ 2009-08-19 Jason Merrill <jason@redhat.com>
+
+ PR c++/41120
+ * g++.dg/other/gc4.C: New.
+
+2009-08-28 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline:
+ 2009-08-25 Uros Bizjak <ubizjak@gmail.com>
+
+ * gcc.c-torture/compile/limits-fndefn.c: Add dg-timeout-factor.
+
+ 2009-08-18 Uros Bizjak <ubizjak@gmail.com>
+
+ * g++.dg/cdce3.C: Add -mieee for alpha*-*-* targets.
+
+ 2009-08-17 Uros Bizjak <ubizjak@gmail.com>
+
+ * lib/target-supports.exp
+ (check_effective_target_vect_cmdline_needed): Add alpha to the list
+ of targets that do not need command line argument to enable SIMD.
+
+2008-08-25 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/41062
+ * gfortran.dg/use_only_4.f90: New test.
+
+2009-08-24 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/41094
+ * gcc.dg/torture/pr41094.c: New testcase.
+ * gcc.dg/torture/builtin-power-1.c: Adjust.
+ * gcc.dg/builtins-10.c: Likewise.
+
+2009-08-23 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/40718
+ * gcc.target/i386/pr40718.c: New test.
+
+2009-08-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/41131
+ * g++.dg/expr/unary3.C: New test.
+
+2009-08-20 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR libfortran/40962
+ * c_f_pointer_tests_4.f90: New test.
+
+2009-08-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/41123
+ * gcc.dg/pr41123.c: New test.
+
2009-08-18 H.J. Lu <hongjiu.lu@intel.com>
* gfortran.dg/pr41011.f: Removed.
diff --git a/gcc/testsuite/g++.dg/cdce3.C b/gcc/testsuite/g++.dg/cdce3.C
index b73ebf81220..6756a700812 100644
--- a/gcc/testsuite/g++.dg/cdce3.C
+++ b/gcc/testsuite/g++.dg/cdce3.C
@@ -2,14 +2,14 @@
/* { dg-require-effective-target c99_runtime } */
/* { dg-options "-O2 -fmath-errno -fdump-tree-cdce-details -DGNU_EXTENSION -DLARGE_LONG_DOUBLE -lm" { target { pow10 && large_long_double } } } */
/* { dg-options "-O2 -fmath-errno -fdump-tree-cdce-details -DLARGE_LONG_DOUBLE -lm" { target { {! pow10 } && large_long_double } } } */
-/* { dg-options "-O2 -fmath-errno -fdump-tree-cdce-details -DGNU_EXTENSION -lm" { target {pow10 && {! large_long_double } } } } */
+/* { dg-options "-O2 -fmath-errno -fdump-tree-cdce-details -DGNU_EXTENSION -lm" { target { pow10 && {! large_long_double } } } } */
/* { dg-options "-O2 -fmath-errno -fdump-tree-cdce-details -lm" { target { {! pow10 } && {! large_long_double } } } } */
-/* { dg-final { scan-tree-dump "cdce3.C:91: note: function call is shrink-wrapped into error conditions\." "cdce" { target { pow10 } } } } */
-/* { dg-final { scan-tree-dump "cdce3.C:92: note: function call is shrink-wrapped into error conditions\." "cdce" { target { pow10 } } } } */
-/* { dg-final { scan-tree-dump "cdce3.C:94: note: function call is shrink-wrapped into error conditions\." "cdce" } } */
-/* { dg-final { scan-tree-dump "cdce3.C:95: note: function call is shrink-wrapped into error conditions\." "cdce" } } */
-/* { dg-final { scan-tree-dump "cdce3.C:96: note: function call is shrink-wrapped into error conditions\." "cdce" } } */
-/* { dg-final { scan-tree-dump "cdce3.C:97: note: function call is shrink-wrapped into error conditions\." "cdce" } } */
+/* { dg-options "-mieee -O2 -fmath-errno -fdump-tree-cdce-details -DGNU_EXTENSION -DLARGE_LONG_DOUBLE -lm" { target { alpha*-*-* && { pow10 && large_long_double } } } } */
+/* { dg-options "-mieee -O2 -fmath-errno -fdump-tree-cdce-details -DLARGE_LONG_DOUBLE -lm" { target { alpha*-*-* && { {! pow10 } && large_long_double } } } } */
+/* { dg-options "-mieee -O2 -fmath-errno -fdump-tree-cdce-details -DGNU_EXTENSION -lm" { target { alpha*-*-* && { pow10 && {! large_long_double } } } } } */
+/* { dg-options "-mieee -O2 -fmath-errno -fdump-tree-cdce-details -lm" { target { alpha*-*-* && { {! pow10 } && {! large_long_double } } } } } */
+/* { dg-final { scan-tree-dump "cdce3.C:95: note: function call is shrink-wrapped into error conditions\." "cdce" { target { pow10 } } } } */
+/* { dg-final { scan-tree-dump "cdce3.C:96: note: function call is shrink-wrapped into error conditions\." "cdce" { target { pow10 } } } } */
/* { dg-final { scan-tree-dump "cdce3.C:98: note: function call is shrink-wrapped into error conditions\." "cdce" } } */
/* { dg-final { scan-tree-dump "cdce3.C:99: note: function call is shrink-wrapped into error conditions\." "cdce" } } */
/* { dg-final { scan-tree-dump "cdce3.C:100: note: function call is shrink-wrapped into error conditions\." "cdce" } } */
@@ -20,6 +20,10 @@
/* { dg-final { scan-tree-dump "cdce3.C:105: note: function call is shrink-wrapped into error conditions\." "cdce" } } */
/* { dg-final { scan-tree-dump "cdce3.C:106: note: function call is shrink-wrapped into error conditions\." "cdce" } } */
/* { dg-final { scan-tree-dump "cdce3.C:107: note: function call is shrink-wrapped into error conditions\." "cdce" } } */
+/* { dg-final { scan-tree-dump "cdce3.C:108: note: function call is shrink-wrapped into error conditions\." "cdce" } } */
+/* { dg-final { scan-tree-dump "cdce3.C:109: note: function call is shrink-wrapped into error conditions\." "cdce" } } */
+/* { dg-final { scan-tree-dump "cdce3.C:110: note: function call is shrink-wrapped into error conditions\." "cdce" } } */
+/* { dg-final { scan-tree-dump "cdce3.C:111: note: function call is shrink-wrapped into error conditions\." "cdce" } } */
/* { dg-final { cleanup-tree-dump "cdce" } } */
#include <stdlib.h>
#include <math.h>
diff --git a/gcc/testsuite/g++.dg/cpp0x/enum1.C b/gcc/testsuite/g++.dg/cpp0x/enum1.C
index af691f028b1..fb03692fab4 100644
--- a/gcc/testsuite/g++.dg/cpp0x/enum1.C
+++ b/gcc/testsuite/g++.dg/cpp0x/enum1.C
@@ -2,5 +2,5 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
-enum : { }; // { dg-error "expected type-specifier" }
+enum : { }; // { dg-error "expected" }
enum : 3 { }; // { dg-error "expected" }
diff --git a/gcc/testsuite/g++.dg/expr/unary3.C b/gcc/testsuite/g++.dg/expr/unary3.C
new file mode 100644
index 00000000000..abca0322d29
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/unary3.C
@@ -0,0 +1,11 @@
+// PR c++/41131
+// { dg-do compile }
+
+struct X { enum E { a = 100 }; };
+
+int
+main ()
+{
+ X x;
+ (void) &x.a; // { dg-error "lvalue required" }
+}
diff --git a/gcc/testsuite/g++.dg/other/gc4.C b/gcc/testsuite/g++.dg/other/gc4.C
new file mode 100644
index 00000000000..50c16b366db
--- /dev/null
+++ b/gcc/testsuite/g++.dg/other/gc4.C
@@ -0,0 +1,14 @@
+// PR c++/41120
+// { dg-options "--param ggc-min-heapsize=0 --param ggc-min-expand=0" }
+
+struct A
+{
+ A();
+};
+
+struct B
+{
+ A a;
+};
+
+B b;
diff --git a/gcc/testsuite/g++.dg/parse/enum5.C b/gcc/testsuite/g++.dg/parse/enum5.C
new file mode 100644
index 00000000000..3ebb02f7573
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/enum5.C
@@ -0,0 +1,17 @@
+// PR c++/41127
+
+#define CHAR_BIT 8
+enum EE {ee};
+typedef unsigned int T;
+
+struct D {
+ T : sizeof(unsigned int) * CHAR_BIT; // OK
+ EE : sizeof(EE) * CHAR_BIT; // OK
+ enum EE : sizeof(EE) * CHAR_BIT; // not OK
+ enum EE xxxx : sizeof(EE) * CHAR_BIT; // OK
+ T x : sizeof(unsigned int) * CHAR_BIT; // OK
+ enum FF {ff} : sizeof(int) * CHAR_BIT; // OK
+} element;
+
+enum EE xx;
+EE yy;
diff --git a/gcc/testsuite/gcc.c-torture/compile/limits-fndefn.c b/gcc/testsuite/gcc.c-torture/compile/limits-fndefn.c
index 10f8714414f..65e60b39e1a 100644
--- a/gcc/testsuite/gcc.c-torture/compile/limits-fndefn.c
+++ b/gcc/testsuite/gcc.c-torture/compile/limits-fndefn.c
@@ -1,4 +1,5 @@
/* { dg-skip-if "too complex for avr and picochip" { picochip-*-* avr-*-* } { "*" } { "" } } */
+/* { dg-timeout-factor 4.0 } */
#define LIM1(x) x##0, x##1, x##2, x##3, x##4, x##5, x##6, x##7, x##8, x##9,
#define LIM2(x) LIM1(x##0) LIM1(x##1) LIM1(x##2) LIM1(x##3) LIM1(x##4) \
LIM1(x##5) LIM1(x##6) LIM1(x##7) LIM1(x##8) LIM1(x##9)
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr41163.c b/gcc/testsuite/gcc.c-torture/compile/pr41163.c
new file mode 100644
index 00000000000..c2248378376
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr41163.c
@@ -0,0 +1,10 @@
+struct option {
+ void *value;
+};
+void parse_options (struct option *);
+void cmd_grep(void)
+{
+ struct option options[] = { { &options } };
+ parse_options(options);
+}
+
diff --git a/gcc/testsuite/gcc.dg/builtins-10.c b/gcc/testsuite/gcc.dg/builtins-10.c
index d90e61ab326..1b141fda252 100644
--- a/gcc/testsuite/gcc.dg/builtins-10.c
+++ b/gcc/testsuite/gcc.dg/builtins-10.c
@@ -25,7 +25,7 @@ void test(double x)
link_error ();
if (pow(pow(x,4.0),0.25) != x)
- link_error ();
+ /* XFAIL. PR41098. */;
}
void test2(double x, double y, double z)
@@ -42,7 +42,7 @@ void test2(double x, double y, double z)
if (pow(sqrt(x),y) != pow(x,y*0.5))
link_error ();
- if (pow(pow(x,y),z) != pow(x,y*z))
+ if (pow(pow(fabs(x),y),z) != pow(fabs(x),y*z))
link_error ();
}
diff --git a/gcc/testsuite/gcc.dg/builtins-config.h b/gcc/testsuite/gcc.dg/builtins-config.h
index 7e375b8d693..eacc09dcf94 100644
--- a/gcc/testsuite/gcc.dg/builtins-config.h
+++ b/gcc/testsuite/gcc.dg/builtins-config.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation.
+/* Copyright (C) 2003, 2004, 2005, 2006, 2009 Free Software Foundation.
Define macros useful in tests for bulitin functions. */
@@ -15,8 +15,8 @@
/* Irix6 doesn't have the entire C99 runtime. */
#elif defined(__AVR__)
/* AVR doesn't have the entire C99 runtime. */
-#elif defined(__FreeBSD__) && (__FreeBSD__ < 5)
-/* FreeBSD before version 5 doesn't have the entire C99 runtime. */
+#elif defined(__FreeBSD__)
+/* FreeBSD up to at least version 8 lacks support for cexp and friends. */
#elif defined(__netware__)
/* NetWare doesn't have the entire C99 runtime. */
#elif defined(__vxworks)
diff --git a/gcc/testsuite/gcc.dg/pr41123.c b/gcc/testsuite/gcc.dg/pr41123.c
new file mode 100644
index 00000000000..076edb46ee5
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr41123.c
@@ -0,0 +1,46 @@
+/* PR middle-end/41123 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-strict-aliasing" } */
+
+struct S { char a, b, c, d, e, f, g, h; };
+struct T { int a, b; };
+
+struct S
+f1 (float _Complex x)
+{
+ return *(struct S *) & x;
+}
+
+int
+f2 (float _Complex x)
+{
+ struct S f = f1 (x);
+ return f.b;
+}
+
+struct T
+f3 (float _Complex x)
+{
+ return *(struct T *) & x;
+}
+
+int
+f4 (float _Complex x)
+{
+ struct T f = f3 (x);
+ return f.a;
+}
+
+int
+f5 (float _Complex x)
+{
+ struct T f = f3 (x);
+ return f.b;
+}
+
+struct T
+f6 (float _Complex x)
+{
+ struct T f = f3 (x);
+ return f;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-power-1.c b/gcc/testsuite/gcc.dg/torture/builtin-power-1.c
index a63ebf55423..d1403c46c94 100644
--- a/gcc/testsuite/gcc.dg/torture/builtin-power-1.c
+++ b/gcc/testsuite/gcc.dg/torture/builtin-power-1.c
@@ -77,9 +77,9 @@ void test(double d1, double d2, double d3,
/* Test pow(pow(x,y),z) -> pow(x,y*z). */
#define POW_POW \
extern void link_failure_pow_pow(void); \
- if (pow(pow(d1, d2), d3) != pow(d1,d2*d3) \
- || powf(powf(f1,f2),f3) != powf(f1,f2*f3) \
- || powl(powl(ld1,ld2),ld3) != powl(ld1,ld2*ld3)) \
+ if (pow(pow(fabs(d1), d2), d3) != pow(fabs(d1),d2*d3) \
+ || powf(powf(fabs(f1),f2),f3) != powf(fabs(f1),f2*f3) \
+ || powl(powl(fabs(ld1),ld2),ld3) != powl(fabs(ld1),ld2*ld3)) \
link_failure_pow_pow()
POW_POW;
diff --git a/gcc/testsuite/gcc.dg/torture/pr41094.c b/gcc/testsuite/gcc.dg/torture/pr41094.c
new file mode 100644
index 00000000000..2a4e9616cbf
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr41094.c
@@ -0,0 +1,19 @@
+/* { dg-do run } */
+/* { dg-options "-ffast-math" } */
+
+#include <math.h>
+
+extern void abort (void);
+
+double foo(void)
+{
+ double x = -4.0;
+ return pow (x * x, 0.25);
+}
+
+int main()
+{
+ if (foo() != 2.0)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr40718.c b/gcc/testsuite/gcc.target/i386/pr40718.c
new file mode 100644
index 00000000000..f6029ed98ab
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr40718.c
@@ -0,0 +1,36 @@
+/* { dg-do run } */
+/* { dg-require-effective-target ilp32 } */
+/* { dg-options "-O1 -foptimize-sibling-calls" } */
+
+void abort (void);
+
+struct S
+{
+ void (__attribute__((__stdcall__)) *f) (struct S *);
+ int i;
+};
+
+void __attribute__((__stdcall__))
+foo (struct S *s)
+{
+ s->i++;
+}
+
+void __attribute__((__stdcall__))
+bar (struct S *s)
+{
+ foo(s);
+ s->f(s);
+}
+
+int main (void)
+{
+ struct S s = { foo, 0 };
+
+ bar (&s);
+ if (s.i != 2)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc/testsuite/gfortran.dg/c_f_pointer_tests_4.f90 b/gcc/testsuite/gfortran.dg/c_f_pointer_tests_4.f90
new file mode 100644
index 00000000000..4f5338d605a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/c_f_pointer_tests_4.f90
@@ -0,0 +1,15 @@
+! { dg-do run }
+program main
+ use iso_c_binding, only: c_ptr, c_loc, c_f_pointer
+ implicit none
+ integer, dimension(2,1,2), target :: table
+ table = reshape ( (/ 1,2,-1,-2/), (/2,1,2/))
+ call set_table (c_loc (table))
+contains
+ subroutine set_table (cptr)
+ type(c_ptr), intent(in) :: cptr
+ integer, dimension(:,:,:), pointer :: table_tmp
+ call c_f_pointer (cptr, table_tmp, (/2,1,2/))
+ if (any(table_tmp /= table)) call abort
+ end subroutine set_table
+end program main
diff --git a/gcc/testsuite/gfortran.dg/intrinsic_5.f90 b/gcc/testsuite/gfortran.dg/intrinsic_5.f90
new file mode 100644
index 00000000000..77ecf32beeb
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/intrinsic_5.f90
@@ -0,0 +1,13 @@
+! { dg-do compile }
+! { dg-options "-fimplicit-none" }
+!
+! PR 41121: [4.5 Regression] compile-time error when building BLAS with -fimplicit-none
+!
+! Original test case: http://www.netlib.org/blas/dgbmv.f
+! Reduced by Joost VandeVondele <jv244@cam.ac.uk>
+
+ INTRINSIC MIN
+ INTEGER :: I,J
+ print *,MIN(I,J)
+END
+
diff --git a/gcc/testsuite/gfortran.dg/pr41126.f90 b/gcc/testsuite/gfortran.dg/pr41126.f90
new file mode 100644
index 00000000000..a43758eadaa
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr41126.f90
@@ -0,0 +1,6 @@
+! { dg-do compile }
+SUBROUTINE write_cputime( checkpoint )
+ CHARACTER(LEN=*), INTENT(IN) :: checkpoint
+ CHARACTER(LEN=LEN_TRIM(checkpoint)+7) :: string1
+ string1 = ADJUSTL(string1)
+END SUBROUTINE write_cputime
diff --git a/gcc/testsuite/gfortran.dg/pr41162.f b/gcc/testsuite/gfortran.dg/pr41162.f
new file mode 100644
index 00000000000..eea3c55f6c1
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr41162.f
@@ -0,0 +1,5 @@
+! { dg-do compile }
+! PRs 41154/41162
+ write (*,'(1PD24.15,F4.2,0P)') 1.0d0
+ write (*,'(1PD24.15,F4.2,0P/)') 1.0d0
+ end
diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_25.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_25.f90
new file mode 100644
index 00000000000..cfa0d443478
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/proc_ptr_25.f90
@@ -0,0 +1,36 @@
+! { dg-do run }
+!
+! PR 41139: [4.5 Regression] a procedure pointer call as actual argument
+!
+! Original test case by Barron Bichon <barron.bichon@swri.org>
+! Modified by Janus Weil <janus@gcc.gnu.org>
+
+PROGRAM test
+
+ PROCEDURE(add), POINTER :: f
+ logical :: g
+
+ ! Passing the function works
+ g=greater(4.,add(1.,2.))
+ if (.not. g) call abort()
+
+ ! Passing the procedure pointer fails
+ f => add
+ g=greater(4.,f(1.,2.))
+ if (.not. g) call abort()
+
+CONTAINS
+
+ REAL FUNCTION add(x,y)
+ REAL, INTENT(in) :: x,y
+ print *,"add:",x,y
+ add = x+y
+ END FUNCTION add
+
+ LOGICAL FUNCTION greater(x,y)
+ REAL, INTENT(in) :: x, y
+ greater = (x > y)
+ END FUNCTION greater
+
+END PROGRAM test
+
diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_18.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_18.f90
new file mode 100644
index 00000000000..4b849b64e18
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/proc_ptr_comp_18.f90
@@ -0,0 +1,33 @@
+! { dg-do run }
+!
+! PR 41139: [4.5 Regression] a procedure pointer call as actual argument
+!
+! Contributed by Janus Weil <janus@gcc.gnu.org>
+
+PROGRAM test
+
+ type :: t
+ PROCEDURE(add), POINTER, nopass :: f
+ end type
+ type(t) :: o
+ logical :: g
+
+ o%f => add
+ g=greater(4.,o%f(1.,2.))
+ if (.not. g) call abort()
+
+CONTAINS
+
+ REAL FUNCTION add(x,y)
+ REAL, INTENT(in) :: x,y
+ add = x+y
+ END FUNCTION add
+
+ LOGICAL FUNCTION greater(x,y)
+ REAL, INTENT(in) :: x, y
+ print *,"greater:",x,y
+ greater = (x > y)
+ END FUNCTION greater
+
+END PROGRAM test
+
diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_19.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_19.f90
new file mode 100644
index 00000000000..8027c82d39b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/proc_ptr_comp_19.f90
@@ -0,0 +1,32 @@
+! { dg-do run }
+!
+! PR 41139: [4.5 Regression] a procedure pointer call as actual argument
+!
+! Contributed by Janus Weil <janus@gcc.gnu.org>
+
+PROGRAM test
+
+ type :: t
+ PROCEDURE(three), POINTER, nopass :: f
+ end type
+ type(t) :: o
+ logical :: g
+
+ o%f => three
+ g=greater(4.,o%f())
+ if (.not. g) call abort()
+
+CONTAINS
+
+ REAL FUNCTION three()
+ three = 3.
+ END FUNCTION
+
+ LOGICAL FUNCTION greater(x,y)
+ REAL, INTENT(in) :: x, y
+ print *,"greater:",x,y
+ greater = (x > y)
+ END FUNCTION greater
+
+END PROGRAM test
+
diff --git a/gcc/testsuite/gfortran.dg/use_only_4.f90 b/gcc/testsuite/gfortran.dg/use_only_4.f90
new file mode 100644
index 00000000000..a37db45ef77
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/use_only_4.f90
@@ -0,0 +1,34 @@
+! { dg-do compile }
+! Test the fix for PR41062, in which an ICE would ensue because
+! of confusion between the two 'one's in the creation of module
+! debug info.
+!
+! Reported by Norman S. Clerman <clerman@fuse.net>
+! Reduced testcase by Tobias Burnus <burnus@gcc.gnu.org>
+!
+module m1
+ interface one ! GENERIC "one"
+ module procedure one1
+ end interface
+contains
+ subroutine one1()
+ call abort
+ end subroutine one1
+end module m1
+
+module m2
+use m1, only : one ! USE generic "one"
+contains
+ subroutine two()
+ call one() ! Call internal "one"
+ contains
+ subroutine one() ! Internal "one"
+ print *, "m2"
+ end subroutine one
+ end subroutine two
+end module m2
+
+ use m2
+ call two
+end
+! { dg-final { cleanup-modules "m1 m2" } }
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 4b151b517c4..6b6dff0139e 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -1276,7 +1276,8 @@ proc check_effective_target_vect_cmdline_needed { } {
verbose "check_effective_target_vect_cmdline_needed: using cached result" 2
} else {
set et_vect_cmdline_needed_saved 1
- if { [istarget ia64-*-*]
+ if { [istarget alpha*-*-*]
+ || [istarget ia64-*-*]
|| (([istarget x86_64-*-*] || [istarget i?86-*-*])
&& [check_effective_target_lp64])
|| ([istarget powerpc*-*-*]