c { dg-do run }
CCC g77 0.5.21 `Actual Bugs':
CCC   * A code-generation bug afflicts Intel x86 targets when `-O2' is
CCC     specified compiling, for example, an old version of the `DNRM2'
CCC     routine.  The x87 coprocessor stack is being somewhat mismanaged
CCC     in cases where assigned `GOTO' and `ASSIGN' are involved.
CCC
CCC     Version 0.5.21 of `g77' contains an initial effort to fix the
CCC     problem, but this effort is incomplete, and a more complete fix is
CCC     planned for the next release.

C     Currently this test fails with (at least) `-O2 -funroll-loops' on
C     i586-unknown-linux-gnulibc1.

C     (This is actually an obsolete version of dnrm2 -- consult the
c     current Netlib BLAS.)

      integer i
      double precision a(1:100), dnrm2
      do i=1,100
         a(i)=0.D0
      enddo
      if (dnrm2(100,a,1) .ne. 0.0) call abort
      end

      double precision function dnrm2 ( n, dx, incx)
      integer i, incx, ix, j, n, next
      double precision   dx(1), cutlo, cuthi, hitest, sum, xmax,zero,one
      data   zero, one /0.0d0, 1.0d0/
      data cutlo, cuthi / 8.232d-11,  1.304d19 /
      j = 0
      if(n .gt. 0 .and. incx.gt.0) go to 10
         dnrm2  = zero
         go to 300
   10 assign 30 to next ! { dg-warning "ASSIGN" "" }
      sum = zero
      i = 1
      ix = 1
   20    go to next,(30, 50, 70, 110) ! { dg-warning "Assigned GOTO" "" }
   30 if( dabs(dx(i)) .gt. cutlo) go to 85
      assign 50 to next ! { dg-warning "ASSIGN" "" }
      xmax = zero
   50 if( dx(i) .eq. zero) go to 200
      if( dabs(dx(i)) .gt. cutlo) go to 85
      assign 70 to next ! { dg-warning "ASSIGN" "" }
      go to 105
  100 continue
      ix = j
      assign 110 to next ! { dg-warning "ASSIGN" "" }
      sum = (sum / dx(i)) / dx(i)
  105 xmax = dabs(dx(i))
      go to 115
   70 if( dabs(dx(i)) .gt. cutlo ) go to 75
  110 if( dabs(dx(i)) .le. xmax ) go to 115
         sum = one + sum * (xmax / dx(i))**2
         xmax = dabs(dx(i))
         go to 200
  115 sum = sum + (dx(i)/xmax)**2
      go to 200
   75 sum = (sum * xmax) * xmax
   85 hitest = cuthi/float( n )
      do 95 j = ix,n
      if(dabs(dx(i)) .ge. hitest) go to 100
         sum = sum + dx(i)**2
         i = i + incx
   95 continue
      dnrm2 = dsqrt( sum )
      go to 300
  200 continue
      ix = ix + 1
      i = i + incx
      if( ix .le. n ) go to 20
      dnrm2 = xmax * dsqrt(sum)
  300 continue
      end
