diff --git a/gcc/testsuite/g++.dg/abi/covariant5.C b/gcc/testsuite/g++.dg/abi/covariant5.C
deleted file mode 100644
index 03e55583..0000000
--- a/gcc/testsuite/g++.dg/abi/covariant5.C
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (C) 2005 Free Software Foundation, Inc.
-// Contributed by Nathan Sidwell 4 Apr 2005 <nathan@codesourcery.com>
-
-// { dg-do run }
-
-// PR 20746: Covariant return pointer could be null.
-
-// Origin: yanliu@ca.ibm.com
-//         nathan@codesourcery.com
-
-struct A {
-  virtual void One ();
-};
-struct B  { 
-  virtual B *Two ();
-  virtual B &Three ();
-};
-
-struct C : A, B
-{
-  virtual C *Two (); 
-  virtual C &Three (); 
-};
-void A::One () {}
-B *B::Two()    {return this;}
-B &B::Three()    {return *this;}
-C *C::Two ()   {return 0;}
-C &C::Three ()   {return *(C *)0;}
-
-B *Foo (B *b)
-{
-  return b->Two ();
-}
-
-B &Bar (B *b)
-{
-  return b->Three ();
-}
-
-int main ()
-{
-  C c;
-
-  /* We should not adjust a null pointer.  */
-  if (Foo (&c))
-    return 1;
-  /* But we should adjust a (bogus) null reference.  */
-  if (!&Bar (&c))
-    return 2;
-
-  return 0;
-}
diff --git a/gcc/testsuite/g++.dg/conversion/simd2.C b/gcc/testsuite/g++.dg/conversion/simd2.C
deleted file mode 100644
index 873e707..0000000
--- a/gcc/testsuite/g++.dg/conversion/simd2.C
+++ /dev/null
@@ -1,16 +0,0 @@
-/* { dg-do compile } */
-
-/* Test generic operations on vectors.  */
-
-int __attribute__((vector_size(16))) a, b, c;
-int __attribute__((vector_size(8))) d;
-void foo()
-{
-     a = b ^ c;
-     a = b + c;
-     a = b - c;
-     a = b * c;
-     a = b / c;
-     a = -b;
-     a = d + b;		/* { dg-error "invalid operands to binary +" } */
-} 
diff --git a/gcc/testsuite/g++.dg/ext/label4.C b/gcc/testsuite/g++.dg/ext/label4.C
deleted file mode 100644
index 80b50a7..0000000
--- a/gcc/testsuite/g++.dg/ext/label4.C
+++ /dev/null
@@ -1,6 +0,0 @@
-// PR c++/20563: ICE (--enable-checking), infinite loop (--disable-checking)
-// Origin:       Giovanni Bajo <giovannibajo@libero.it>
-
-// { dg-do compile }
-
-__label__ *l;  // { dg-error "before" }
diff --git a/gcc/testsuite/g++.dg/inherit/using4.C b/gcc/testsuite/g++.dg/inherit/using4.C
deleted file mode 100644
index a0b3873..0000000
--- a/gcc/testsuite/g++.dg/inherit/using4.C
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (C) 2005 Free Software Foundation, Inc.
-// Contributed by Nathan Sidwell 6 Jun 2005 <nathan@codesourcery.com>
-
-// PR 20613:uninformative diagnostic
-// Origin:  Wolfgang Bangerth <bangerth@dealii.org>
-
-struct B { 
-  void f();
-}; 
- 
-struct D : B { 
-  using B::f; 
-  using B::f;  // { dg-error "repeated" }
-}; 
diff --git a/gcc/testsuite/g++.dg/init/member1.C b/gcc/testsuite/g++.dg/init/member1.C
deleted file mode 100644
index 1c89d5a..0000000
--- a/gcc/testsuite/g++.dg/init/member1.C
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (C) 2005 Free Software Foundation, Inc.
-// Contributed by Nathan Sidwell 13 Jun 2005 <nathan@codesourcery.com>
-
-// Origin:   Ivan Godard <igodard@pacbell.net>
-// Bug 20789: ICE on invalid
-
-template<typename> struct A;
-
-template<int> struct B {};
-
-template<typename T> struct C
-{
-  static const int i = A<T>::i;  // { dg-error "incomplete" }
-  static const int j = i;      // { dg-error "initialized by a non-const" }
-  B<j> b;  // { dg-error "not a valid template arg" }
-};
-
-C<int> c;
diff --git a/gcc/testsuite/g++.dg/other/crash-4.C b/gcc/testsuite/g++.dg/other/crash-4.C
deleted file mode 100644
index 35f23e8..0000000
--- a/gcc/testsuite/g++.dg/other/crash-4.C
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (C) 2005 Free Software Foundation, Inc.
-// Contributed by Nathan Sidwell 14 Jun 2005 <nathan@codesourcery.com>
-
-// PR 20678: ICE on error message
-// Origin:  Andrew Pinski pinskia@gcc.gnu.org
-
-struct a
-{
-  a(const a&);
-};
-struct b
-{ // { dg-error "cannot bind packed field" }
-  a aa __attribute__((packed));
-};
-struct c
-{
-  b bb;
-  c(const b& __a): bb(__a) {} // { dg-error "synthesized" }
-};
diff --git a/gcc/testsuite/g++.dg/parse/crash26.C b/gcc/testsuite/g++.dg/parse/crash26.C
deleted file mode 100644
index 2b4f165..0000000
--- a/gcc/testsuite/g++.dg/parse/crash26.C
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (C) 2005 Free Software Foundation, Inc.
-// Contributed by Nathan Sidwell 13 Jun 2005 <nathan@codesourcery.com>
-
-// Origin:  Volker Reichelt <reichelt@gcc.gnu.org>
-// Bug 21929: ICE on invalid
-
-template<int> struct A
-{
-    struct B;
-};
-
-template<> struct A<void>::B {}; // { dg-error "mismatch|expected|name a type|extra" }
diff --git a/gcc/testsuite/g++.dg/parse/defarg9.C b/gcc/testsuite/g++.dg/parse/defarg9.C
deleted file mode 100644
index 8496cfb..0000000
--- a/gcc/testsuite/g++.dg/parse/defarg9.C
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (C) 2005 Free Software Foundation, Inc.
-// Contributed by Nathan Sidwell 6 Jun 2005 <nathan@codesourcery.com>
-
-// PR 21903:Reject legal with default arg confusion
-// Origin:  Wolfgang Bangerth <bangerth@dealii.org>
-
-
-struct O { 
-  template<typename T> struct B { 
-    void set (T, bool=true); 
-  }; 
-  
-  struct D : public B<int> {}; 
-}; 
-
-void x () 
-{ 
-  O::D d; 
-  d.set(1); 
-}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr21562.c b/gcc/testsuite/gcc.c-torture/compile/pr21562.c
deleted file mode 100644
index d100b28..0000000
--- a/gcc/testsuite/gcc.c-torture/compile/pr21562.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* { dg-options "-O3 -fno-inline" } */
-struct foo { int a, b, c; };
-void abort(void);
-void exit(int);
-
-void
-brother (int a, int b, int c)
-{
-  if (a)
-    abort ();
-}
-
-void
-sister (struct foo f, int b, int c)
-{
-  brother ((f.b == b), b, c);
-}
-
-int
-main ()
-{
-  struct foo f = { 7, 8, 9 };
-  sister (f, 1, 2);
-  exit (0);
-}
diff --git a/gcc/testsuite/gcc.dg/simd-3.c b/gcc/testsuite/gcc.dg/simd-3.c
deleted file mode 100644
index 34ad75d..0000000
--- a/gcc/testsuite/gcc.dg/simd-3.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-maltivec" { target powerpc-*-* } } */
-
-__attribute__ ((vector_size (2))) signed char v1, v2, v3;
-void
-one (void)
-{
-  v1 = v2 + v3;
-}
-
-__attribute__ ((vector_size (8))) signed char v4, v5, v6;
-void
-two (void)
-{
-  v4 = v5 + v6;
-}
diff --git a/gcc/testsuite/gcc.dg/simd-4.c b/gcc/testsuite/gcc.dg/simd-4.c
deleted file mode 100644
index f7b28d4..0000000
--- a/gcc/testsuite/gcc.dg/simd-4.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* { dg-do compile } */
-
-typedef int myint;
-
-float __attribute__((vector_size(16))) b;
-int __attribute__((vector_size(16))) d;
-myint __attribute__((vector_size(16))) d2;
-unsigned int __attribute__((vector_size(16))) e;
-
-void foo()
-{
-	b + d; /* { dg-error "invalid operands to binary" } */
-	d += e;
-	d2 += d;
-}
diff --git a/gcc/testsuite/gfortran.dg/altreturn_1.f90 b/gcc/testsuite/gfortran.dg/altreturn_1.f90
deleted file mode 100644
index 0849358..0000000
--- a/gcc/testsuite/gfortran.dg/altreturn_1.f90
+++ /dev/null
@@ -1,7 +0,0 @@
-! { dg-do compile }
-	subroutine foo (a)
-	real t, a, baz
-	call bar (*10)
-	t = 2 * baz ()
-	IF (t.gt.0) t = baz ()
-10	END
diff --git a/gcc/testsuite/gfortran.dg/comma_format_extension_1.f b/gcc/testsuite/gfortran.dg/comma_format_extension_1.f
deleted file mode 100644
index a3a5a98..0000000
--- a/gcc/testsuite/gfortran.dg/comma_format_extension_1.f
+++ /dev/null
@@ -1,11 +0,0 @@
-! { dg-do compile }
-! { dg-options "" }
-! test that the extension for a missing comma is accepted
-
-      subroutine mysub
-      dimension ibar(5)
-      write (3,1001) ( ibar(m), m = 1, 5 )
-
- 1001 format (/5x,' ',i4' '/ )
-      return
-      end
diff --git a/gcc/testsuite/gfortran.dg/comma_format_extension_2.f b/gcc/testsuite/gfortran.dg/comma_format_extension_2.f
deleted file mode 100644
index 7eb17b5..0000000
--- a/gcc/testsuite/gfortran.dg/comma_format_extension_2.f
+++ /dev/null
@@ -1,10 +0,0 @@
-! { dg-do compile }
-! test that the extension for a missing comma is accepted
-
-      subroutine mysub
-      dimension ibar(5)
-      write (3,1001) ( ibar(m), m = 1, 5 )
-
- 1001 format (/5x,' ',i4' '/ ) ! { dg-warning "Missing comma" }
-      return
-      end
diff --git a/gcc/testsuite/gfortran.dg/comma_format_extension_3.f b/gcc/testsuite/gfortran.dg/comma_format_extension_3.f
deleted file mode 100644
index 15ee189..0000000
--- a/gcc/testsuite/gfortran.dg/comma_format_extension_3.f
+++ /dev/null
@@ -1,16 +0,0 @@
-! PR libfortran/15332 and PR fortran/13257
-! We used to accept this as an extension but
-! did do the correct thing at runtime.
-! Note the missing , before i1 in the format.
-! { do-do run }
-! { dg-options "" }
-      character*12 c
-
-      write (c,100) 0, 1
-      if (c .ne. 'i = 0, j = 1') call abort
-      
-      write (c,100) 0
-      if (c .ne. 'i = 0       ') call abort
-
- 100  format ('i = 'i1,:,', j = ',i1)
-      end
diff --git a/gcc/testsuite/gfortran.dg/comma_format_extension_4.f b/gcc/testsuite/gfortran.dg/comma_format_extension_4.f
deleted file mode 100644
index 5f6ecc5..0000000
--- a/gcc/testsuite/gfortran.dg/comma_format_extension_4.f
+++ /dev/null
@@ -1,10 +0,0 @@
-! PR fortran/13257
-! Note the missing , before i1 in the format.
-! { do-do run }
-! { dg-options "" }
-      character*5 c
-      write (c,1001) 1
-      if (c .ne. '    1 ') call abort
-
- 1001 format (' ',i4' ')
-      end
diff --git a/gcc/testsuite/gfortran.dg/deallocate_stat.f90 b/gcc/testsuite/gfortran.dg/deallocate_stat.f90
deleted file mode 100644
index b691f21..0000000
--- a/gcc/testsuite/gfortran.dg/deallocate_stat.f90
+++ /dev/null
@@ -1,77 +0,0 @@
-! { dg-do run }
-! PR 17792
-! PR 21375
-! Test that the STAT argument to DEALLOCATE works with POINTERS and 
-! ALLOCATABLE arrays.
-program deallocate_stat
-   
-   implicit none
-
-   integer i
-   real, pointer :: a1(:), a2(:,:), a3(:,:,:), a4(:,:,:,:), &
-   &  a5(:,:,:,:,:), a6(:,:,:,:,:,:), a7(:,:,:,:,:,:,:)
-
-   real, allocatable :: b1(:), b2(:,:), b3(:,:,:), b4(:,:,:,:), &
-   &  b5(:,:,:,:,:), b6(:,:,:,:,:,:), b7(:,:,:,:,:,:,:)
-
-   allocate(a1(2), a2(2,2), a3(2,2,2), a4(2,2,2,2), a5(2,2,2,2,2))
-   allocate(a6(2,2,2,2,2,2), a7(2,2,2,2,2,2,2))
-
-   a1 = 1. ; a2 = 2. ; a3 = 3. ; a4 = 4. ; a5 = 5. ; a6 = 6. ; a7 = 7.
-
-   i = 13
-   deallocate(a1, stat=i) ; if (i /= 0) call abort
-   deallocate(a2, stat=i) ; if (i /= 0) call abort
-   deallocate(a3, stat=i) ; if (i /= 0) call abort
-   deallocate(a4, stat=i) ; if (i /= 0) call abort
-   deallocate(a5, stat=i) ; if (i /= 0) call abort
-   deallocate(a6, stat=i) ; if (i /= 0) call abort
-   deallocate(a7, stat=i) ; if (i /= 0) call abort
-
-   i = 14
-   deallocate(a1, stat=i) ; if (i /= 1) call abort
-   deallocate(a2, stat=i) ; if (i /= 1) call abort
-   deallocate(a3, stat=i) ; if (i /= 1) call abort
-   deallocate(a4, stat=i) ; if (i /= 1) call abort
-   deallocate(a5, stat=i) ; if (i /= 1) call abort
-   deallocate(a6, stat=i) ; if (i /= 1) call abort
-   deallocate(a7, stat=i) ; if (i /= 1) call abort
-
-   allocate(b1(2), b2(2,2), b3(2,2,2), b4(2,2,2,2), b5(2,2,2,2,2))
-   allocate(b6(2,2,2,2,2,2), b7(2,2,2,2,2,2,2))
-
-   b1 = 1. ; b2 = 2. ; b3 = 3. ; b4 = 4. ; b5 = 5. ; b6 = 6. ; b7 = 7.
-
-   i = 13
-   deallocate(b1, stat=i) ; if (i /= 0) call abort
-   deallocate(b2, stat=i) ; if (i /= 0) call abort
-   deallocate(b3, stat=i) ; if (i /= 0) call abort
-   deallocate(b4, stat=i) ; if (i /= 0) call abort
-   deallocate(b5, stat=i) ; if (i /= 0) call abort
-   deallocate(b6, stat=i) ; if (i /= 0) call abort
-   deallocate(b7, stat=i) ; if (i /= 0) call abort
-
-   i = 14
-   deallocate(b1, stat=i) ; if (i /= 1) call abort
-   deallocate(b2, stat=i) ; if (i /= 1) call abort
-   deallocate(b3, stat=i) ; if (i /= 1) call abort
-   deallocate(b4, stat=i) ; if (i /= 1) call abort
-   deallocate(b5, stat=i) ; if (i /= 1) call abort
-   deallocate(b6, stat=i) ; if (i /= 1) call abort
-   deallocate(b7, stat=i) ; if (i /= 1) call abort
-
-
-   allocate(a1(2), a2(2,2), a3(2,2,2), b4(2,2,2,2), b5(2,2,2,2,2))
-   allocate(b6(2,2,2,2,2,2))
-
-   a1 = 1. ; a2 = 2. ; a3 = 3. ; b4 = 4. ; b5 = 5. ; b6 = 6.
-
-   i = 13
-   deallocate(a1, stat=i) ;         if (i /= 0) call abort
-   deallocate(a2, a1, stat=i) ;     if (i /= 1) call abort
-   deallocate(a1, a3, a2, stat=i) ; if (i /= 2) call abort
-   deallocate(b4, stat=i) ;         if (i /= 0) call abort
-   deallocate(b4, b5, stat=i) ;     if (i /= 1) call abort
-   deallocate(b4, b5, b6, stat=i) ; if (i /= 2) call abort
-
-end program deallocate_stat
diff --git a/gcc/testsuite/gfortran.dg/duplicate_labels.f90 b/gcc/testsuite/gfortran.dg/duplicate_labels.f90
deleted file mode 100644
index 7523d0c..0000000
--- a/gcc/testsuite/gfortran.dg/duplicate_labels.f90
+++ /dev/null
@@ -1,59 +0,0 @@
-! { dg-do compile }
-! PR 21257
-program dups
-
-  integer i,j,k
-
-  abc: do i = 1, 3
-  abc:    do j = 1, 3    ! { dg-error "Duplicate construct label" }
-              k = i + j
-          end do abc
-       end do abc        ! { dg-error "Expecting END PROGRAM" }
-
-  xyz: do i = 1, 2
-          k = i + 2
-       end do xyz
-  xyz: do j = 1, 5      ! { dg-error "Duplicate construct label" }
-          k = j + 2
-       end do loop      ! { dg-error "Expecting END PROGRAM" }
-
-  her: if (i == 1) then
-  her:    if (j  == 1) then  ! { dg-error "Duplicate construct label" }
-               k = i + j
-          end if her
-       end if her            ! { dg-error "Expecting END PROGRAM" }
-
-  his: if (i == 1) then
-           i = j
-        end if his
-  his: if (j === 1) then    ! { dg-error "Duplicate construct label" }
-           print *, j
-        end if his          ! { dg-error "Expecting END PROGRAM" }
-
-  sgk: select case (i)
-       case (1)
-  sgk:   select case (j)    ! { dg-error "Duplicate construct label" }
-          case (10)
-             i = i + j
-          case (20)
-             j = j + i
-          end select sgk
-        case (2)             ! { dg-error "Unexpected CASE statement" }
-            i = i + 1
-            j = j + 1
-        end select sgk       ! { dg-error "Expecting END PROGRAM" }
-
-  apl: select case (i)
-         case (1)
-            k = 2
-         case (2)
-            j = 1
-         end select apl
-  apl: select case (i)  ! { dg-error "Duplicate construct label" }
-         case (1)       ! { dg-error "Unexpected CASE statement" }
-            j = 2
-         case (2)       ! { dg-error "Unexpected CASE statement" }
-            k = 1
-         end select apl ! { dg-error "Expecting END PROGRAM" }
-
-end program dups
diff --git a/gcc/testsuite/gfortran.dg/f2c_6.f90 b/gcc/testsuite/gfortran.dg/f2c_6.f90
deleted file mode 100644
index b276b3d..0000000
--- a/gcc/testsuite/gfortran.dg/f2c_6.f90
+++ /dev/null
@@ -1,84 +0,0 @@
-! { dg-do run }
-! { dg-options "-ff2c" }
-! Verifies that complex pointer results work with -ff2c
-! try all permutations of result clause in function yes/no
-!                     and result clause in interface yes/no
-! this is not possible in Fortran 77, but this exercises a previously
-! buggy codepath
-function c() result (r)
-  common // z
-  complex, pointer :: r
-  complex, target :: z
-
-  r=>z
-end function c
-
-function d()
-  common // z
-  complex, pointer :: d
-  complex, target :: z
-
-  d=>z
-end function d
-
-function e()
-  common // z
-  complex, pointer :: e
-  complex, target :: z
-
-  e=>z
-end function e
-
-function f() result(r)
-  common // z
-  complex, pointer :: r
-  complex, target :: z
-
-  r=>z
-end function f
-
-interface
-   function c
-     complex, pointer :: c
-   end function c
-end interface
-interface
-   function d
-     complex, pointer :: d
-   end function d
-end interface
-interface
-   function e result(r)
-     complex, pointer :: r
-   end function e
-end interface
-interface
-   function f result(r)
-     complex, pointer :: r
-   end function f
-end interface
-
-common // z
-complex, target :: z
-complex, pointer :: p
-
-z = (1.,0.)
-p => c()
-z = (2.,0.)
-if (p /= z) call abort ()
-
-NULLIFY(p)
-p => d()
-z = (3.,0.)
-if (p /= z) call abort ()
-
-NULLIFY(p)
-p => e()
-z = (4.,0.)
-if (p /= z) call abort ()
-
-NULLIFY(p)
-p => f()
-z = (5.,0.)
-if (p /= z) call abort ()
-end
diff --git a/gcc/testsuite/gfortran.dg/f2c_7.f90 b/gcc/testsuite/gfortran.dg/f2c_7.f90
deleted file mode 100644
index c15ff7a..0000000
--- a/gcc/testsuite/gfortran.dg/f2c_7.f90
+++ /dev/null
@@ -1,57 +0,0 @@
-! { dg-do run }
-! { dg-options "-ff2c" }
-! Verifies that array results work with -ff2c
-! try all permutations of result clause in function yes/no
-!                     and result clause in interface yes/no
-! this is not possible in Fortran 77, but this exercises a previously
-! buggy codepath
-function c() result (r)
-  complex :: r(5)
-  r = 0.
-end function c
-
-function d()
-  complex :: d(5)
-  d = 1.
-end function d
-
-subroutine test_without_result
-interface
-   function c
-     complex :: c(5)
-   end function c
-end interface
-interface
-   function d
-     complex :: d(5)
-   end function d
-end interface
-complex z(5)
-z = c()
-if (any(z /= 0.)) call abort ()
-z = d()
-if (any(z /= 1.)) call abort ()
-end subroutine test_without_result
-
-subroutine test_with_result
-interface
-   function c result(r)
-     complex :: r(5)
-   end function c
-end interface
-interface
-   function d result(r)
-     complex :: r(5)
-   end function d
-end interface
-complex z(5)
-z = c()
-if (any(z /= 0.)) call abort ()
-z = d()
-if (any(z /= 1.)) call abort ()
-end subroutine test_with_result
-
-call test_without_result
-call test_with_result
-end
-  
diff --git a/gcc/testsuite/gfortran.dg/logint-1.f b/gcc/testsuite/gfortran.dg/logint-1.f
deleted file mode 100644
index d634910..0000000
--- a/gcc/testsuite/gfortran.dg/logint-1.f
+++ /dev/null
@@ -1,43 +0,0 @@
-c { dg-do compile }
-c { dg-options "-O2 -std=legacy" }
-       LOGICAL*1 l1
-       LOGICAL*2 l2
-       LOGICAL*4 l4
-       INTEGER*1 i1
-       INTEGER*2 i2
-       INTEGER*4 i4
-
-       i1 = .TRUE.
-       i2 = .TRUE.
-       i4 = .TRUE.
-
-       i1 = .FALSE.
-       i2 = .FALSE.
-       i4 = .FALSE.
-
-       i1 = l1
-       i2 = l1
-       i4 = l1
-
-       i1 = l2
-       i2 = l2
-       i4 = l2
-
-       i1 = l4
-       i2 = l4
-       i4 = l4
-
-       l1 = i1
-       l2 = i1
-       l4 = i1
-
-       l1 = i2
-       l2 = i2
-       l4 = i2
-
-       l1 = i4
-       l2 = i4
-       l4 = i4
-
-       END
- 
diff --git a/gcc/testsuite/gfortran.dg/logint-2.f b/gcc/testsuite/gfortran.dg/logint-2.f
deleted file mode 100644
index a5fcf23..0000000
--- a/gcc/testsuite/gfortran.dg/logint-2.f
+++ /dev/null
@@ -1,43 +0,0 @@
-c { dg-do compile }
-c { dg-options "-O2 -std=f95" }
-       LOGICAL*1 l1
-       LOGICAL*2 l2
-       LOGICAL*4 l4
-       INTEGER*1 i1
-       INTEGER*2 i2
-       INTEGER*4 i4
-
-       i1 = .TRUE.  ! { dg-error "convert" }
-       i2 = .TRUE.  ! { dg-error "convert" }
-       i4 = .TRUE.  ! { dg-error "convert" }
-
-       i1 = .FALSE. ! { dg-error "convert" }
-       i2 = .FALSE. ! { dg-error "convert" }
-       i4 = .FALSE. ! { dg-error "convert" }
-
-       i1 = l1      ! { dg-error "convert" }
-       i2 = l1      ! { dg-error "convert" }
-       i4 = l1      ! { dg-error "convert" }
-
-       i1 = l2      ! { dg-error "convert" }
-       i2 = l2      ! { dg-error "convert" }
-       i4 = l2      ! { dg-error "convert" }
-
-       i1 = l4      ! { dg-error "convert" }
-       i2 = l4      ! { dg-error "convert" }
-       i4 = l4      ! { dg-error "convert" }
-
-       l1 = i1      ! { dg-error "convert" }
-       l2 = i1      ! { dg-error "convert" }
-       l4 = i1      ! { dg-error "convert" }
-
-       l1 = i2      ! { dg-error "convert" }
-       l2 = i2      ! { dg-error "convert" }
-       l4 = i2      ! { dg-error "convert" }
-
-       l1 = i4      ! { dg-error "convert" }
-       l2 = i4      ! { dg-error "convert" }
-       l4 = i4      ! { dg-error "convert" }
-
-       END
- 
diff --git a/gcc/testsuite/gfortran.dg/logint-3.f b/gcc/testsuite/gfortran.dg/logint-3.f
deleted file mode 100644
index cf927ab..0000000
--- a/gcc/testsuite/gfortran.dg/logint-3.f
+++ /dev/null
@@ -1,43 +0,0 @@
-c { dg-do compile }
-c { dg-options "-O2" }
-       LOGICAL*1 l1
-       LOGICAL*2 l2
-       LOGICAL*4 l4
-       INTEGER*1 i1
-       INTEGER*2 i2
-       INTEGER*4 i4
-
-       i1 = .TRUE.  ! { dg-warning "Extension: Conversion" }
-       i2 = .TRUE.  ! { dg-warning "Extension: Conversion" }
-       i4 = .TRUE.  ! { dg-warning "Extension: Conversion" }
-
-       i1 = .FALSE. ! { dg-warning "Extension: Conversion" }
-       i2 = .FALSE. ! { dg-warning "Extension: Conversion" }
-       i4 = .FALSE. ! { dg-warning "Extension: Conversion" }
-
-       i1 = l1      ! { dg-warning "Extension: Conversion" }
-       i2 = l1      ! { dg-warning "Extension: Conversion" }
-       i4 = l1      ! { dg-warning "Extension: Conversion" }
-
-       i1 = l2      ! { dg-warning "Extension: Conversion" }
-       i2 = l2      ! { dg-warning "Extension: Conversion" }
-       i4 = l2      ! { dg-warning "Extension: Conversion" }
-
-       i1 = l4      ! { dg-warning "Extension: Conversion" }
-       i2 = l4      ! { dg-warning "Extension: Conversion" }
-       i4 = l4      ! { dg-warning "Extension: Conversion" }
-
-       l1 = i1      ! { dg-warning "Extension: Conversion" }
-       l2 = i1      ! { dg-warning "Extension: Conversion" }
-       l4 = i1      ! { dg-warning "Extension: Conversion" }
-
-       l1 = i2      ! { dg-warning "Extension: Conversion" }
-       l2 = i2      ! { dg-warning "Extension: Conversion" }
-       l4 = i2      ! { dg-warning "Extension: Conversion" }
-
-       l1 = i4      ! { dg-warning "Extension: Conversion" }
-       l2 = i4      ! { dg-warning "Extension: Conversion" }
-       l4 = i4      ! { dg-warning "Extension: Conversion" }
-
-       END
- 
diff --git a/gcc/testsuite/gfortran.dg/matmul_1.f90 b/gcc/testsuite/gfortran.dg/matmul_1.f90
deleted file mode 100644
index b3881c9..0000000
--- a/gcc/testsuite/gfortran.dg/matmul_1.f90
+++ /dev/null
@@ -1,53 +0,0 @@
-!{ dg-do run }
-! Test MATMUL for various arguments and results
-! (test values checked with GNU octave).
-! PR18857 was due to an incorrect assertion that component base==0
-! for both input arguments and the result.
-! provided by Paul Thomas - pault@gcc.gnu.org
-
-Program matmul_1
-  integer, parameter                                :: N = 5
-  integer, parameter                                :: T = 4
-  integer                                           :: i
-  real(kind=T), dimension(:,:), allocatable         :: a, b, c
-  real(kind=T), dimension(N,N)                      :: x, y, z
-
-  allocate (a(2*N, N), b(N, N), c(2*N, N))
-
-  do i = 1, 2*N
-    a(i, :) = real (i)
-  end do
-  b = 4.0_T
-
-  do i = 1, N
-    x(i, :) = real (i)
-  end do
-  y = 2.0_T
-
-!                           whole array
-
-  z = 0.0_T
-  z = matmul (x, y)
-  if (sum (z) /= 750.0_T) call abort ()
-
-!                           array sections
-
-  c = 0.0_T
-  c = matmul (a(7:9,3:N), b(3:N,3:4))
-  if (sum (c) /= 576.0_T) call abort ()
-
-!                           uses a temp
-
-  c = 0.0_T
-  c = matmul (a, b + x)
-  if (sum (c) /= 9625.0_T) call abort ()
-
-!                           returns to a temp
-
-  c = 0.0_T
-  c = a + matmul (a, b)
-  if (sum (c) /= 5775.0_T) call abort ()
-
-  deallocate (a, b, c)
-
-end program matmul_1
diff --git a/gcc/testsuite/gfortran.dg/nested_reshape.f90 b/gcc/testsuite/gfortran.dg/nested_reshape.f90
deleted file mode 100644
index d71e4ec..0000000
--- a/gcc/testsuite/gfortran.dg/nested_reshape.f90
+++ /dev/null
@@ -1,12 +0,0 @@
-! { dg-do run }
-! PR 20436: This used to give a runtime error.
-program nested_reshape
-  implicit none
-  real :: k(8,2)
-  real :: o(8,2)
-
-  k = reshape((/1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0, &
-            9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0/), (/8,2/))
-
-  o = reshape(reshape(k, (/2,8/), order=(/2,1/)), (/8,2/))
-end program
diff --git a/gcc/testsuite/gfortran.dg/pr19926.f90 b/gcc/testsuite/gfortran.dg/pr19926.f90
deleted file mode 100644
index 34991ec..0000000
--- a/gcc/testsuite/gfortran.dg/pr19926.f90
+++ /dev/null
@@ -1,25 +0,0 @@
-! { dg-do run }
-module b
-  type cat
-     integer :: i = 0
-  end type cat
-end module b
-
-program a
-  use b
-  type(cat) z
-  integer :: i = 0, j(4,3,2) = 0
-  call string_comp(i)
-  if (i /= 3) call abort
-  call string_comp(z%i)
-  if (z%i /= 3) call abort
-  call string_comp(j(1,2,1))
-  if (j(1,2,1) /= 3) call abort
-end program a
-
-subroutine string_comp(i)
-   integer, parameter :: map(0:50) = 3
-   integer :: i
-   i = map(42)
-end subroutine string_comp
-
diff --git a/gcc/testsuite/gfortran.dg/reshape-alloc.f90 b/gcc/testsuite/gfortran.dg/reshape-alloc.f90
deleted file mode 100644
index c4c7a0e..0000000
--- a/gcc/testsuite/gfortran.dg/reshape-alloc.f90
+++ /dev/null
@@ -1,32 +0,0 @@
-! { dg-do run }
-! PR 20074: This used to segfault at runtime.
-! Test case contributed by "Alfredo Buttari" <pitagoras@tin.it>
-
-program tryreshape
-
-  integer,allocatable :: vect1(:),resh1(:,:)
-  integer,pointer :: vect(:),resh(:,:)
-  integer :: vect2(2*4), resh2(2,4)
-  integer :: r, s(2)
-
-  r=2;  nb=4
-
-  s(:)=(/r,nb/)
-
-  allocate(vect(nb*r),vect1(nb*r))
-  allocate(resh(r,nb),resh1(r,nb))
-
-  vect =1
-  vect1=1
-  vect2=1
-
-  resh2 = reshape(vect2,s)
-  if (resh2(1,1) /= 1.0) call abort
-
-  resh1 = reshape(vect1,s)
-  if (resh1(1,1) /= 1.0) call abort
-
-  resh = reshape(vect,s)
-  if (resh(1,1) /= 1.0) call abort
-
-end program tryreshape
diff --git a/gcc/testsuite/gfortran.dg/reshape.f90 b/gcc/testsuite/gfortran.dg/reshape.f90
deleted file mode 100644
index 3dba098..0000000
--- a/gcc/testsuite/gfortran.dg/reshape.f90
+++ /dev/null
@@ -1,33 +0,0 @@
-! { dg-do run }
-! This tests a few reshape PRs.
-program resh
-  implicit none
-  real, dimension (2,3) :: a,c
-  real, dimension (12) :: b
-  type foo
-    real :: r
-  end type foo
-  type(foo), dimension (2,3) :: ar
-  type(foo), dimension (12) :: br
-
-  character (len=80) line1, line2, line3
-  integer :: i
-
-  ! PR 21108:  This used to give undefined results.
-  b = (/(i,i=1,12)/)
-  a = reshape(b(1:12:2),shape(a),order=(/2,1/))
-  c = reshape(b(1:12:2),shape(a),order=(/2,1/))
-  if (any (a /= c)) call abort
-
-  ! Test generic reshape
-  br%r = b
-  ar = reshape(br(1:12:2),shape(a),order=(/2,1/))
-  if (any (ar%r /= a)) call abort
-
-  ! Test callee-allocated memory with a write statement
-  write (line1,'(6F8.3)') reshape(b(1:12:2),shape(a),order=(/2,1/))
-  write (line2,'(6F8.3)') a
-  if (line1 /= line2 ) call abort
-  write (line3,'(6F8.3)') reshape(br(1:12:2),shape(ar),order=(/2,1/))
-  if (line1 /= line3 ) call abort
-end
diff --git a/gcc/testsuite/gfortran.fortran-torture/execute/in-pack.f90 b/gcc/testsuite/gfortran.fortran-torture/execute/in-pack.f90
deleted file mode 100644
index b9ea268..0000000
--- a/gcc/testsuite/gfortran.fortran-torture/execute/in-pack.f90
+++ /dev/null
@@ -1,92 +0,0 @@
-!  Check in_pack and in_unpack for integer and comlex types, with
-!  alignment issues thrown in for good measure.
-
-program main
-  implicit none
-
-  complex(kind=4) :: a4(5),b4(5),aa4(5),bb4(5)
-  real(kind=4) :: r4(100)
-  equivalence(a4(1),r4(1)),(b4(1),r4(12))
-
-  complex(kind=8) :: a8(5),b8(5),aa8(5),bb8(5)
-  real(kind=8) :: r8(100)
-  equivalence(a8(1),r8(1)),(b8(1),r8(12))
-
-  integer(kind=4) :: i4(5),ii4(5)
-  integer(kind=8) :: i8(5),ii8(5)
-
-  integer :: i
-
-  a4 = (/(cmplx(i,-i,kind=4),i=1,5)/)
-  b4 = (/(2*cmplx(i,-i,kind=4),i=1,5)/)
-  call csub4(a4(5:1:-1),b4(5:1:-1),5)
-  aa4 = (/(cmplx(5-i+1,i-5-1,kind=4),i=1,5)/)
-  if (any(aa4 /= a4)) call abort
-  bb4 = (/(2*cmplx(5-i+1,i-5-1,kind=4),i=1,5)/)
-  if (any(bb4 /= b4)) call abort
-
-  a8 = (/(cmplx(i,-i,kind=8),i=1,5)/)
-  b8 = (/(2*cmplx(i,-i,kind=8),i=1,5)/)
-  call csub8(a8(5:1:-1),b8(5:1:-1),5)
-  aa8 = (/(cmplx(5-i+1,i-5-1,kind=8),i=1,5)/)
-  if (any(aa8 /= a8)) call abort
-  bb8 = (/(2*cmplx(5-i+1,i-5-1,kind=8),i=1,5)/)
-  if (any(bb8 /= b8)) call abort
-
-  i4 = (/(i, i=1,5)/)
-  call isub4(i4(5:1:-1),5)
-  ii4 = (/(5-i+1,i=1,5)/)
-  if (any(ii4 /= i4)) call abort
-
-  i8 = (/(i,i=1,5)/)
-  call isub8(i8(5:1:-1),5)
-  ii8 = (/(5-i+1,i=1,5)/)
-  if (any(ii8 /= i8)) call abort
-
-end program main
-
-subroutine csub4(a,b,n)
-  implicit none
-  complex(kind=4), dimension(n) :: a,b
-  complex(kind=4), dimension(n) :: aa, bb
-  integer :: n, i
-  aa = (/(cmplx(n-i+1,i-n-1,kind=4),i=1,n)/)
-  if (any(aa /= a)) call abort
-  bb = (/(2*cmplx(n-i+1,i-n-1,kind=4),i=1,5)/)
-  if (any(bb /= b)) call abort
-  a = (/(cmplx(i,-i,kind=4),i=1,5)/)
-  b = (/(2*cmplx(i,-i,kind=4),i=1,5)/)
-end subroutine csub4
-
-subroutine csub8(a,b,n)
-  implicit none
-  complex(kind=8), dimension(n) :: a,b
-  complex(kind=8), dimension(n) :: aa, bb
-  integer :: n, i
-  aa = (/(cmplx(n-i+1,i-n-1,kind=8),i=1,n)/)
-  if (any(aa /= a)) call abort
-  bb = (/(2*cmplx(n-i+1,i-n-1,kind=8),i=1,5)/)
-  if (any(bb /= b)) call abort
-  a = (/(cmplx(i,-i,kind=8),i=1,5)/)
-  b = (/(2*cmplx(i,-i,kind=8),i=1,5)/)
-end subroutine csub8
-
-subroutine isub4(a,n)
-  implicit none
-  integer(kind=4), dimension(n) :: a
-  integer(kind=4), dimension(n) :: aa
-  integer :: n, i
-  aa = (/(n-i+1,i=1,n)/)
-  if (any(aa /= a)) call abort
-  a = (/(i,i=1,5)/)
-end subroutine isub4
-
-subroutine isub8(a,n)
-  implicit none
-  integer(kind=8), dimension(n) :: a
-  integer(kind=8), dimension(n) :: aa
-  integer :: n, i
-  aa = (/(n-i+1,i=1,n)/)
-  if (any(aa /= a)) call abort
-  a = (/(i,i=1,5)/)
-end subroutine isub8
diff --git a/libgfortran/generated/in_pack_c4.c b/libgfortran/generated/in_pack_c4.c
deleted file mode 100644
index ed3b8ec..0000000
--- a/libgfortran/generated/in_pack_c4.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/* Helper function for repacking arrays.
-   Copyright 2003 Free Software Foundation, Inc.
-   Contributed by Paul Brook <paul@nowt.org>
-
-This file is part of the GNU Fortran 95 runtime library (libgfortran).
-
-Libgfortran is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-In addition to the permissions in the GNU General Public License, the
-Free Software Foundation gives you unlimited permission to link the
-compiled version of this file into combinations with other programs,
-and to distribute those combinations without any restriction coming
-from the use of this file.  (The General Public License restrictions
-do apply in other respects; for example, they cover modification of
-the file, and distribution when not linked into a combine
-executable.)
-
-Libgfortran is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public
-License along with libgfortran; see the file COPYING.  If not,
-write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
-
-#include "config.h"
-#include <stdlib.h>
-#include <assert.h>
-#include "libgfortran.h"
-
-/* Allocates a block of memory with internal_malloc if the array needs
-   repacking.  */
-
-GFC_COMPLEX_4 *
-internal_pack_c4 (gfc_array_c4 * source)
-{
-  index_type count[GFC_MAX_DIMENSIONS];
-  index_type extent[GFC_MAX_DIMENSIONS];
-  index_type stride[GFC_MAX_DIMENSIONS];
-  index_type stride0;
-  index_type dim;
-  index_type ssize;
-  const GFC_COMPLEX_4 *src;
-  GFC_COMPLEX_4 *dest;
-  GFC_COMPLEX_4 *destptr;
-  int n;
-  int packed;
-
-  if (source->dim[0].stride == 0)
-    {
-      source->dim[0].stride = 1;
-      return source->data;
-    }
-
-  dim = GFC_DESCRIPTOR_RANK (source);
-  ssize = 1;
-  packed = 1;
-  for (n = 0; n < dim; n++)
-    {
-      count[n] = 0;
-      stride[n] = source->dim[n].stride;
-      extent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound;
-      if (extent[n] <= 0)
-        {
-          /* Do nothing.  */
-          packed = 1;
-          break;
-        }
-
-      if (ssize != stride[n])
-        packed = 0;
-
-      ssize *= extent[n];
-    }
-
-  if (packed)
-    return source->data;
-
-  /* Allocate storage for the destination.  */
-  destptr = (GFC_COMPLEX_4 *)internal_malloc_size (ssize * sizeof (GFC_COMPLEX_4));
-  dest = destptr;
-  src = source->data;
-  stride0 = stride[0];
-
-
-  while (src)
-    {
-      /* Copy the data.  */
-      *(dest++) = *src;
-      /* Advance to the next element.  */
-      src += stride0;
-      count[0]++;
-      /* Advance to the next source element.  */
-      n = 0;
-      while (count[n] == extent[n])
-        {
-          /* When we get to the end of a dimension, reset it and increment
-             the next dimension.  */
-          count[n] = 0;
-          /* We could precalculate these products, but this is a less
-             frequently used path so proabably not worth it.  */
-          src -= stride[n] * extent[n];
-          n++;
-          if (n == dim)
-            {
-              src = NULL;
-              break;
-            }
-          else
-            {
-              count[n]++;
-              src += stride[n];
-            }
-        }
-    }
-  return destptr;
-}
-
diff --git a/libgfortran/generated/in_pack_c8.c b/libgfortran/generated/in_pack_c8.c
deleted file mode 100644
index e313540..0000000
--- a/libgfortran/generated/in_pack_c8.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/* Helper function for repacking arrays.
-   Copyright 2003 Free Software Foundation, Inc.
-   Contributed by Paul Brook <paul@nowt.org>
-
-This file is part of the GNU Fortran 95 runtime library (libgfortran).
-
-Libgfortran is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-In addition to the permissions in the GNU General Public License, the
-Free Software Foundation gives you unlimited permission to link the
-compiled version of this file into combinations with other programs,
-and to distribute those combinations without any restriction coming
-from the use of this file.  (The General Public License restrictions
-do apply in other respects; for example, they cover modification of
-the file, and distribution when not linked into a combine
-executable.)
-
-Libgfortran is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public
-License along with libgfortran; see the file COPYING.  If not,
-write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
-
-#include "config.h"
-#include <stdlib.h>
-#include <assert.h>
-#include "libgfortran.h"
-
-/* Allocates a block of memory with internal_malloc if the array needs
-   repacking.  */
-
-GFC_COMPLEX_8 *
-internal_pack_c8 (gfc_array_c8 * source)
-{
-  index_type count[GFC_MAX_DIMENSIONS];
-  index_type extent[GFC_MAX_DIMENSIONS];
-  index_type stride[GFC_MAX_DIMENSIONS];
-  index_type stride0;
-  index_type dim;
-  index_type ssize;
-  const GFC_COMPLEX_8 *src;
-  GFC_COMPLEX_8 *dest;
-  GFC_COMPLEX_8 *destptr;
-  int n;
-  int packed;
-
-  if (source->dim[0].stride == 0)
-    {
-      source->dim[0].stride = 1;
-      return source->data;
-    }
-
-  dim = GFC_DESCRIPTOR_RANK (source);
-  ssize = 1;
-  packed = 1;
-  for (n = 0; n < dim; n++)
-    {
-      count[n] = 0;
-      stride[n] = source->dim[n].stride;
-      extent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound;
-      if (extent[n] <= 0)
-        {
-          /* Do nothing.  */
-          packed = 1;
-          break;
-        }
-
-      if (ssize != stride[n])
-        packed = 0;
-
-      ssize *= extent[n];
-    }
-
-  if (packed)
-    return source->data;
-
-  /* Allocate storage for the destination.  */
-  destptr = (GFC_COMPLEX_8 *)internal_malloc_size (ssize * sizeof (GFC_COMPLEX_8));
-  dest = destptr;
-  src = source->data;
-  stride0 = stride[0];
-
-
-  while (src)
-    {
-      /* Copy the data.  */
-      *(dest++) = *src;
-      /* Advance to the next element.  */
-      src += stride0;
-      count[0]++;
-      /* Advance to the next source element.  */
-      n = 0;
-      while (count[n] == extent[n])
-        {
-          /* When we get to the end of a dimension, reset it and increment
-             the next dimension.  */
-          count[n] = 0;
-          /* We could precalculate these products, but this is a less
-             frequently used path so proabably not worth it.  */
-          src -= stride[n] * extent[n];
-          n++;
-          if (n == dim)
-            {
-              src = NULL;
-              break;
-            }
-          else
-            {
-              count[n]++;
-              src += stride[n];
-            }
-        }
-    }
-  return destptr;
-}
-
diff --git a/libgfortran/generated/in_unpack_c4.c b/libgfortran/generated/in_unpack_c4.c
deleted file mode 100644
index e24939e..0000000
--- a/libgfortran/generated/in_unpack_c4.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/* Helper function for repacking arrays.
-   Copyright 2003 Free Software Foundation, Inc.
-   Contributed by Paul Brook <paul@nowt.org>
-
-This file is part of the GNU Fortran 95 runtime library (libgfortran).
-
-Libgfortran is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-In addition to the permissions in the GNU General Public License, the
-Free Software Foundation gives you unlimited permission to link the
-compiled version of this file into combinations with other programs,
-and to distribute those combinations without any restriction coming
-from the use of this file.  (The General Public License restrictions
-do apply in other respects; for example, they cover modification of
-the file, and distribution when not linked into a combine
-executable.)
-
-Libgfortran is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public
-License along with libgfortran; see the file COPYING.  If not,
-write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
-
-#include "config.h"
-#include <stdlib.h>
-#include <assert.h>
-#include <string.h>
-#include "libgfortran.h"
-
-void
-internal_unpack_c4 (gfc_array_c4 * d, const GFC_COMPLEX_4 * src)
-{
-  index_type count[GFC_MAX_DIMENSIONS];
-  index_type extent[GFC_MAX_DIMENSIONS];
-  index_type stride[GFC_MAX_DIMENSIONS];
-  index_type stride0;
-  index_type dim;
-  index_type dsize;
-  GFC_COMPLEX_4 *dest;
-  int n;
-
-  dest = d->data;
-  if (src == dest || !src)
-    return;
-
-  if (d->dim[0].stride == 0)
-    d->dim[0].stride = 1;
-
-  dim = GFC_DESCRIPTOR_RANK (d);
-  dsize = 1;
-  for (n = 0; n < dim; n++)
-    {
-      count[n] = 0;
-      stride[n] = d->dim[n].stride;
-      extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
-      if (extent[n] <= 0)
-        abort ();
-
-      if (dsize == stride[n])
-        dsize *= extent[n];
-      else
-        dsize = 0;
-    }
-
-  if (dsize != 0)
-    {
-      memcpy (dest, src, dsize * sizeof (GFC_COMPLEX_4));
-      return;
-    }
-
-  stride0 = stride[0];
-
-  while (dest)
-    {
-      /* Copy the data.  */
-      *dest = *(src++);
-      /* Advance to the next element.  */
-      dest += stride0;
-      count[0]++;
-      /* Advance to the next source element.  */
-      n = 0;
-      while (count[n] == extent[n])
-        {
-          /* When we get to the end of a dimension, reset it and increment
-             the next dimension.  */
-          count[n] = 0;
-          /* We could precalculate these products, but this is a less
-             frequently used path so proabably not worth it.  */
-          dest -= stride[n] * extent[n];
-          n++;
-          if (n == dim)
-            {
-              dest = NULL;
-              break;
-            }
-          else
-            {
-              count[n]++;
-              dest += stride[n];
-            }
-        }
-    }
-}
-
diff --git a/libgfortran/generated/in_unpack_c8.c b/libgfortran/generated/in_unpack_c8.c
deleted file mode 100644
index 6686507..0000000
--- a/libgfortran/generated/in_unpack_c8.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/* Helper function for repacking arrays.
-   Copyright 2003 Free Software Foundation, Inc.
-   Contributed by Paul Brook <paul@nowt.org>
-
-This file is part of the GNU Fortran 95 runtime library (libgfortran).
-
-Libgfortran is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-In addition to the permissions in the GNU General Public License, the
-Free Software Foundation gives you unlimited permission to link the
-compiled version of this file into combinations with other programs,
-and to distribute those combinations without any restriction coming
-from the use of this file.  (The General Public License restrictions
-do apply in other respects; for example, they cover modification of
-the file, and distribution when not linked into a combine
-executable.)
-
-Libgfortran is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public
-License along with libgfortran; see the file COPYING.  If not,
-write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
-
-#include "config.h"
-#include <stdlib.h>
-#include <assert.h>
-#include <string.h>
-#include "libgfortran.h"
-
-void
-internal_unpack_c8 (gfc_array_c8 * d, const GFC_COMPLEX_8 * src)
-{
-  index_type count[GFC_MAX_DIMENSIONS];
-  index_type extent[GFC_MAX_DIMENSIONS];
-  index_type stride[GFC_MAX_DIMENSIONS];
-  index_type stride0;
-  index_type dim;
-  index_type dsize;
-  GFC_COMPLEX_8 *dest;
-  int n;
-
-  dest = d->data;
-  if (src == dest || !src)
-    return;
-
-  if (d->dim[0].stride == 0)
-    d->dim[0].stride = 1;
-
-  dim = GFC_DESCRIPTOR_RANK (d);
-  dsize = 1;
-  for (n = 0; n < dim; n++)
-    {
-      count[n] = 0;
-      stride[n] = d->dim[n].stride;
-      extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
-      if (extent[n] <= 0)
-        abort ();
-
-      if (dsize == stride[n])
-        dsize *= extent[n];
-      else
-        dsize = 0;
-    }
-
-  if (dsize != 0)
-    {
-      memcpy (dest, src, dsize * sizeof (GFC_COMPLEX_8));
-      return;
-    }
-
-  stride0 = stride[0];
-
-  while (dest)
-    {
-      /* Copy the data.  */
-      *dest = *(src++);
-      /* Advance to the next element.  */
-      dest += stride0;
-      count[0]++;
-      /* Advance to the next source element.  */
-      n = 0;
-      while (count[n] == extent[n])
-        {
-          /* When we get to the end of a dimension, reset it and increment
-             the next dimension.  */
-          count[n] = 0;
-          /* We could precalculate these products, but this is a less
-             frequently used path so proabably not worth it.  */
-          dest -= stride[n] * extent[n];
-          n++;
-          if (n == dim)
-            {
-              dest = NULL;
-              break;
-            }
-          else
-            {
-              count[n]++;
-              dest += stride[n];
-            }
-        }
-    }
-}
-
diff --git a/libjava/testsuite/libjava.lang/PR19870.java b/libjava/testsuite/libjava.lang/PR19870.java
deleted file mode 100644
index f9e6bc31..0000000
--- a/libjava/testsuite/libjava.lang/PR19870.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// PR19870: Test static field access across nested class boundaries.
-//
-public class PR19870
-{
-  private static int x = 123;
-
-  static class Foo
-  {
-    private static int junk = 1000;
-
-    static void snafu( )
-    {
-      System.out.println( x);
-      x = 456;
-      System.out.println( PR19870.x);
-      PR19870.x = 789;
-      System.out.println( PR19870.x);
-
-      System.out.println( Bar.junk);
-    }
-  }
-
-  static class Bar
-  {
-    private static int junk = 1984;
-
-    static void snafu( )
-    {
-      System.out.println( Foo.junk);
-      Foo.junk = 2000;
-      System.out.println( Foo.junk);
-    }
-  }
-
-  public static void main( String[] args)
-  {
-    Foo.snafu( );
-    Bar.snafu( );
-
-    System.out.println( Foo.junk);
-    Foo.junk = 3000;
-    System.out.println( Foo.junk);
-  }
-}
diff --git a/libjava/testsuite/libjava.lang/PR19870.out b/libjava/testsuite/libjava.lang/PR19870.out
deleted file mode 100644
index ab58915..0000000
--- a/libjava/testsuite/libjava.lang/PR19870.out
+++ /dev/null
@@ -1,8 +0,0 @@
-123
-456
-789
-1984
-1000
-2000
-2000
-3000
