This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Trunk: Extraneous external symbols for some Fortran codes.


L.S.

I'm seeing the following problem on alphaev6-unknown-linux-gnu using the
trunk:

Compiling the following Fortran code with `-g -O2 -funroll-loops
-ffast-math', I get an unresolved external when linking (visible when
doing the above with -S):

$LC22.

This is the (preprocessed) source:

      subroutine   condcv( kcall,nhor,nlev,kstart,kstop,
     +             dtime,conacc,dtheta,ahyb,bhyb,
     +             t,q,cw,pf,dpf,
     +             klabcv,klabc,klab,
     +             wpsp,wldcp,wtc,wtcdif,wqc,wqcdif,
     +             wqp,wtp,wcwp,wqsat,wdqsdt,wrhu,
     +             wqmax,wqliq,wqac,wbfrac,wdift,wdifq,
     +             wscdif,wdifs,
     +             wbu,wdpcld,wdptot,wgpot,
     +             cucov,totcov )
      implicit
none                                                           
      real  pi,latvap,rair,cpair,ccpq,epsilo,gravit,tmelt,latice,
     +              rhos,rhoh2o,solar,stebol,carman,rearth,omega
      common/confys/pi,latvap,rair,cpair,ccpq,epsilo,gravit,tmelt,
     +             latice,rhos,rhoh2o,solar,stebol,carman,rearth,omega
      real acrit,acrtun,alspbl,alsmin,hgtmix,
     x     assat,roumin,tseafr,sncrt,wsmax,
     + emsurf,csecur
      common/ctun/acrit,acrtun,alspbl,alsmin,hgtmix,
     x            assat,roumin,tseafr,sncrt,wsmax,
     + emsurf,csecur
      real       he273,tvirtc,u00max,hu00,
     + aecon,conae,coales,hccu,hcunrm,hmrcu,hmrst,htaucu,hp0,
     + cbfeff,hvterm,hvsnow,hkmelt,tanvil,hcst,pmoist,
     + prbice(1750),bfeff(1750),hdewi(1750),hmroft(1750),dttabl
      real       hdl,ht273,stpevp,cfreez
      real       hkevap,tcir, 
     +  hkap,hdldcp,hecdr,hldcp,coalcu,coalst,sqvsno,
     +  heldr,elotci,asnow,bsnow,snoref
      common/comconds/hdl,ht273,he273,tvirtc,stpevp,u00max,hu00,
     + aecon,conae,cfreez,coales,hccu,hcunrm,hmrcu,hmrst,htaucu,hp0,
     + cbfeff,hvterm,hvsnow,hkmelt,tanvil,hcst,pmoist,
     + prbice,bfeff,hdewi,hmroft,dttabl,hkevap,tcir, 
     + hkap,hdldcp,hecdr,hldcp,coalcu,coalst,sqvsno,
     + heldr,elotci,asnow,bsnow,snoref
      integer nhor,nlev,kstart,kstop,knlevm,knlevp,
     +        kcall,jk,jl,jkm1,jkp1,jkp2,kklab,kkla,jintt
      integer klabcv(nhor,nlev),klabc(nhor,nlev),klab(nhor,nlev)
      real dtime,conacc,dtheta  
      real zdthecr
      real zpf,zpfp1,zsec,zpcr,ztvir,ztvirp,ztvirc,zqsat,
     +     zceva,zdift,zdifq,zdifq1,zt,zdifp,zqcd,zqcd1,zdgpot,
     +     zcev,zbucr,zdpf,zcpi,zc,zc1,zc2,zc3,zc4,zc5,zc6,      
     +     zc7,ztunc,zcc1,zcc2,zcc3,zcc4,zcc5,zcc6,zcc7,
     +     zfrc1,zpardt,zmepsi,zresat  
      real zkaccr,zqpar,ztpar,zdelta,ztmp  
      real zspar,zqcmax 
      real ahyb(nlev+1),bhyb(nlev+1)
      real wqmax(nhor),wpsp(nhor),wqsat(nhor),wdqsdt(nhor)
      real wgpot(nhor,nlev),t(nhor,nlev),q(nhor,nlev),
     +     cw(nhor,nlev),pf(nhor,nlev),dpf(nhor,nlev),
     +     wldcp(nhor,nlev),wtc(nhor,nlev),wtcdif(nhor,nlev),
     +     wqc(nhor,nlev),wqcdif(nhor,nlev),wqp(nhor,nlev),
     +     wtp(nhor,nlev),wcwp(nhor,nlev),
     +     wrhu(nhor,nlev),wqliq(nhor,nlev),wdift(nhor,nlev),
     +     wqac(nhor,nlev),wbfrac(nhor,nlev),wdifq(nhor,nlev),
     +     wbu(nhor,nlev),wdpcld(nhor,nlev),wdptot(nhor,nlev),
     +     totcov(nhor,nlev),cucov(nhor,nlev)            
      real wscdif(nhor,nlev),wdifs(nhor,nlev)
      real xndegr
      integer nstart,nstop
      parameter (xndegr=100.,nstart=1316,nstop=37316)
      real estab,destab
      common/comtab/estab(nstart:nstop),destab(nstart:nstop)
      real zc5p,zc6e,zfracp,pp,pecor
      parameter (
     +    zc5p=10000.
     +   ,zc6e=0.378
     +)
      real esat,desdt,tt
      esat(tt)=estab(nint(xndegr*tt))
      desdt(tt)=destab(nint(xndegr*tt))
      zfracp(pp)=min( pp, zc5p )/zc5p
      pecor(pp,tt)=pp -zfracp(pp)*zc6e*esat(tt)
      zceva=0.18
      zpardt=1.00 
      ztunc=0.50
      zbucr=0.0030
      zkaccr=2.2E8/dtime
      zdthecr=0.125
      zqpar=0.0015
      ztpar=0.0
      zspar=0.0
      zqcmax=0.0030
      zsec=0.00001 
      zfrc1=1.0E-7  
      zpcr=10000.
      zcpi=1./cpair 
      zmepsi=1. -epsilo
      knlevm=nlev-1  
      knlevp=nlev+1
      do jk=1,nlev
        do jl=kstart,kstop
          klabcv(jl,jk)=0
          klabc(jl,jk)=0
          klab(jl,jk)=0
          wqac(jl,jk)=0.
          wdptot(jl,jk)=0.
          wdpcld(jl,jk)=0.
          wbfrac(jl,jk)=0.
          wbu(jl,jk)=0.
          wgpot(jl,jk)=0.
          wtc(jl,jk)=0.
          wtcdif(jl,jk)=0.
          wdift(jl,jk)=0.
          wdifq(jl,jk)=0.
          wscdif(jl,jk)=0.
          wdifs(jl,jk)=0.
          wqc(jl,jk)=0.
          wqcdif(jl,jk)=0.
          wqliq(jl,jk)=0.
          jintt = max(1, 1 + int((tmelt - wtp(jl,jk))/dttabl))
          jintt = min(jintt, 1750)
          wldcp(jl,jk) = zcpi * (latvap + hdl
     +                 * prbice(jintt))
        enddo 
      enddo 
      do jl=kstart,kstop
        wqsat(jl)=0.
        wdqsdt(jl)=0.
        wqmax(jl)=0.
      enddo
      do jl=kstart,kstop
        wtc(jl,nlev)=wtp(jl,nlev) +zpardt 
        wqc(jl,nlev)=wqp(jl,nlev)
        wqmax(jl)=wqp(jl,nlev)
        zdifp=wpsp(jl)*(1. -bhyb(nlev))  -ahyb(nlev)
        zpf=0.5*( ahyb(nlev) +ahyb(knlevp) +
     +           (bhyb(nlev) +bhyb(knlevp))*wpsp(jl) )
        ztvir=wtp(jl,nlev)*(1. +tvirtc*wqp(jl,nlev) -wcwp(jl,nlev))
        wgpot(jl,nlev)=alog(wpsp(jl)/(zpf +zsec))
        wgpot(jl,nlev)=rair*ztvir*wgpot(jl,nlev)
        klabcv(jl,nlev)=4
        klab(jl,nlev)=1
        wdptot(jl,1)=2.*(wpsp(jl) -zpf)
        wqac(jl,1)=zdifp*wqp(jl,nlev) -dpf(jl,nlev)*q(jl,nlev)
      enddo
      do jk=knlevm,1,-1
        jkp1=jk+1
        jkp2=jk+2
        do jl=kstart,kstop
          zpf=0.5*( ahyb(jk) +ahyb(jkp1) +
     +           (bhyb(jk) +bhyb(jkp1))*wpsp(jl) )
          zpfp1=0.5*( ahyb(jkp1) +ahyb(jkp2) +
     +           (bhyb(jkp1) +bhyb(jkp2))*wpsp(jl) )
          zdifp=ahyb(jkp1) -ahyb(jk) +
     +          ( bhyb(jkp1) -bhyb(jk))*wpsp(jl)
          ztvir=wtp(jl,jk)*(1. +tvirtc*wqp(jl,jk) -wcwp(jl,jk))
          ztvirp=wtp(jl,jkp1)*
     +           (1. +tvirtc*wqp(jl,jkp1) -wcwp(jl,jkp1))
          wgpot(jl,jk)=wgpot(jl,jkp1) + rair*alog(zpfp1/zpf)*       
     +                 0.5 * (ztvirp + ztvir)
          jintt = max(1, 1 + int((tmelt - wtc(jl,jkp1))/dttabl))
          jintt = min(jintt, 1750)
          wldcp(jl,jk) =(latvap + latice*
     +                  prbice(jintt))/cpair
          zdgpot =wgpot(jl,jkp1) - wgpot(jl,jk)
          wqliq(jl,jkp1)=wqmax(jl)-wqc(jl,jkp1)
          zresat=1./pecor(zpf,wtp(jl,jk)) 
          zqsat=epsilo*esat(wtp(jl,jk))*zresat 
          wrhu(jl,jk)=wqp(jl,jk)/zqsat
          wtc(jl,jk)=wtc(jl,jkp1) +
     +    wtc(jl,jkp1)*(1. +tvirtc*wqc(jl,jkp1) -wqliq(jl,jkp1))*
     +    zdgpot /(ztvirp*cpair )
          zresat=1./pecor(zpf,wtc(jl,jk))
          wqsat(jl)=epsilo*esat(wtc(jl,jk))*zresat
          wqc(jl,jk)=wqc(jl,jkp1)
          zdifq=wqc(jl,jk)-wqsat(jl)
          zt=wtc(jl,jk)
          wdqsdt(jl)=epsilo*zpf*desdt(zt)*
     +               zresat*zresat 
          zqcd =zdifq/(1. +wldcp(jl,jk)*wdqsdt(jl))
          zqcd =max(zqcd ,0.)
          wqc(jl,jk)=wqc(jl,jk) -zqcd
          wtc(jl,jk)=wtc(jl,jk) +zqcd * wldcp(jl,jk)
          if( zqcd.gt.0.0 ) then 
            zresat=1./pecor(zpf,wtc(jl,jk)) 
            wqsat(jl)=epsilo*esat(wtc(jl,jk))*zresat 
            zdifq1=wqc(jl,jk)-wqsat(jl)
            zqcd1=zdifq1/(1. +wldcp(jl,jk)*wdqsdt(jl))
            wqc(jl,jk)=wqc(jl,jk) -zqcd1
            wtc(jl,jk)=wtc(jl,jk) +zqcd1 * wldcp(jl,jk)
          endif 
          wqliq(jl,jk)=wqmax(jl) -wqc(jl,jk)
          wqliq(jl,jk)=min( wqliq(jl,jk), zqcmax )
          ztvirc=wtc(jl,jk)*(1. +tvirtc*wqc(jl,jk) -wqliq(jl,jk))
          zdift=ztvirc -ztvir
          kklab=klab(jl,jkp1)
          ztmp=zkaccr*wqac(jl,kklab) -wdptot(jl,kklab) -zdifp
          if((zdift.gt.0.0).and.(ztmp.gt.0.0)) then
            wqac(jl,kklab)=wqac(jl,kklab) +
     +                     zdifp*wqp(jl,jk) -dpf(jl,jk)*q(jl,jk)
            wbu(jl,kklab)=wbu(jl,kklab) +zdifp*zdift/ztvir
            wdptot(jl,kklab)=wdptot(jl,kklab) +zdifp
            klab(jl,jk)=klab(jl,jkp1)
            klabcv(jl,jk)=1
            if( zdifq.gt.0. ) then
              klabcv(jl,jk)=2
              wdift(jl,jk)=ztvirc -ztvir +ztpar 
              wdifq(jl,jk)=wqc(jl,jk) -wqp(jl,jk) +zqpar 
              wdifq(jl,jk)=max( wdifq(jl,jk),0. )
              wdifs(jl,jk)=wqliq(jl,jk) +zspar 
              wdifs(jl,jk)=max( wdifs(jl,jk),0. )
              wtcdif(jl,kklab)=wtcdif(jl,kklab) +zdifp*wdift(jl,jk)    
              wqcdif(jl,kklab)=wqcdif(jl,kklab) +zdifp*wdifq(jl,jk)
              wscdif(jl,kklab)=wscdif(jl,kklab) +zdifp*wdifs(jl,jk)
              wbfrac(jl,kklab)=wbfrac(jl,kklab) +zdifp*wrhu(jl,jk)
              wdpcld(jl,kklab)=wdpcld(jl,kklab) +zdifp
            endif
          else
            wtc(jl,jk)=wtp(jl,jk) +zpardt 
            wqc(jl,jk)=wqp(jl,jk)
            wqmax(jl)=wqp(jl,jk)
            klabcv(jl,jk)=4
            kkla=klab(jl,jkp1)+1
            klab(jl,jk)=kkla
            wtcdif(jl,kkla)=0.
            wqcdif(jl,kkla)=0.
            wscdif(jl,kkla)=0.
            wqac(jl,kkla)=zdifp*wqp(jl,jk) -dpf(jl,jk)*q(jl,jk)
            wbfrac(jl,kkla)=0.
            wbu(jl,kkla)=0.
            wdptot(jl,kkla)=zdifp
            wdpcld(jl,kkla)=0.
          endif
        enddo
      enddo
      do jk=2,nlev
        jkm1=jk-1
        do jl=kstart,kstop
          kklab=klab(jl,jk)
          if( (klab(jl,jk).ne.klab(jl,jkm1)).and.
     +        (klabcv(jl,jk).eq.2).and.
     +        (wqac(jl,kklab).gt.0.0) ) then 
             klabcv(jl,jk)=3
             klabc(jl,jk)=1 
          endif
          if( (klab(jl,jk).eq.klab(jl,jkm1)).and.
     +        (klabc(jl,jkm1).eq.1) ) then
            klabc(jl,jk)=1
          endif
          if( (klab(jl,jk).eq.klab(jl,jkm1)).and.
     +        (klabcv(jl,jk).eq.2).and. 
     +        (wqac(jl,kklab).gt.0.0) ) then 
          klabcv(jl,jk)=3
          endif
        enddo
      enddo
      do jk=2,nlev
        jkm1=jk-1
        do jl=kstart,kstop
          if( (klab(jl,jk).ne.klab(jl,jkm1)).and.
     +    (klabcv(jl,jk).eq.3) ) then
            kklab=klab(jl,jk)
            wbu(jl,kklab)=wbu(jl,kklab)/(wdptot(jl,kklab)+zsec)
            wqac(jl,kklab)=wqac(jl,kklab)/(wdpcld(jl,kklab)+zsec)
            wtcdif(jl,kklab)=wtcdif(jl,kklab)/
     +                       (wdpcld(jl,kklab) +zsec)
            wqcdif(jl,kklab)=wqcdif(jl,kklab)/
     +                       (wdpcld(jl,kklab) +zsec)
            wscdif(jl,kklab)=wscdif(jl,kklab)/
     +                       (wdpcld(jl,kklab) +zsec)
            wbfrac(jl,kklab)=wbfrac(jl,kklab)/
     +                       (wdpcld(jl,kklab) +zsec)
            wbfrac(jl,kklab)=(1. -wbfrac(jl,kklab))*
     +                       (1. -wbfrac(jl,kklab))
          endif
        enddo
      enddo
      if( kcall.eq.1 ) then 
      do jk=1,nlev
        jkp1=jk+1
        do jl=kstart,kstop
          zdpf=ahyb(jkp1) -ahyb(jk) +
     +         wpsp(jl)*(bhyb(jkp1) -bhyb(jk))    
          zpf=0.5*( ahyb(jk) +ahyb(jkp1) +
     +           (bhyb(jk) +bhyb(jkp1))*wpsp(jl) )
          zresat=1./pecor(zpf,t(jl,jk))
          wqsat(jl)=epsilo*esat(t(jl,jk))*zresat
          wdqsdt(jl)=epsilo*zpf*desdt(t(jl,jk))*
     +               zresat*zresat 
          kklab=klab(jl,jk)
          zdelta=min( wbu(jl,kklab)/zbucr, 1. )*
     +           min( wdptot(jl,kklab)/zpcr, 1. )*
     +           min( dtheta/zdthecr, 1. )
          if( klabc(jl,jk).eq.1 ) then
            zc1=(1.-zdelta)*wqp(jl,jk)
            wqp(jl,jk)=zdelta*q(jl,jk)*dpf(jl,jk)/(zdpf+zsec) +zc1
          endif
          if( klabcv(jl,jk).eq.3 ) then
            zc1=wqsat(jl)
            zc2=wdqsdt(jl)
            zc3=zdelta*wqac(jl,kklab)*(1. -wbfrac(jl,kklab))*
     +          wdifs(jl,jk)/(wscdif(jl,kklab) +zsec)
            zc4=zdelta*wqac(jl,kklab)*wbfrac(jl,kklab)*
     +          wdifq(jl,jk)/(wqcdif(jl,kklab) +zsec)
            zcev=ztunc/(dtime*max(wqsat(jl) -q(jl,jk),zsec))
            zcev=min( zceva, zcev )
            zc5=wldcp(jl,jk)*zdelta*wqac(jl,kklab)*
     +          (1. -wbfrac(jl,kklab))*
     +          wdift(jl,jk)/(wtcdif(jl,kklab) +zsec)
            zc6=zcev*dtime*wcwp(jl,jk)
            zc7=wldcp(jl,jk)*zc6
            zcc1=( wtp(jl,jk) +zc5 -zc1*zc7 +zc2*zc7*t(jl,jk) )/
     +           (1. +zc2*zc7)
            zcc2=zc7/(1. +zc2*zc7)
            zcc3=( wqp(jl,jk) +zc4 +zc1*zc6 -zc2*zc6*t(jl,jk) )/
     +           (1. +zc6)
            zcc4=zc2*zc6/(1. +zc6) 
            zcc5=wcwp(jl,jk) +zc3 -zc1*zc6 +zc2*zc6*t(jl,jk) 
            zcc6=-zc2*zc6 
            wtp(jl,jk)=(zcc1 +zcc2*zcc3)/(1. -zcc2*zcc4)
            wqp(jl,jk)=(zcc3 +zcc1*zcc4)/(1. -zcc2*zcc4)
            wcwp(jl,jk)=zcc5 +zcc6*wtp(jl,jk) +zc6*wqp(jl,jk)
          endif
            if( wcwp(jl,jk).lt.zfrc1 ) then 
              wqp(jl,jk)=wqp(jl,jk) +wcwp(jl,jk)
              wtp(jl,jk)=wtp(jl,jk) -wldcp(jl,jk)*wcwp(jl,jk)
              wcwp(jl,jk)=0. 
            endif  
        enddo 
      enddo 
      endif 
     
return                                                                  
     
end                                                                     

-- 
Toon Moene - mailto:toon@moene.indiv.nluug.nl - phoneto: +31 346 214290
Saturnushof 14, 3738 XG  Maartensdijk, The Netherlands
Maintainer, GNU Fortran 77: http://gcc.gnu.org/onlinedocs/g77_news.html
Join GNU Fortran 95: http://g95.sourceforge.net/ (under construction)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]