[LLVMdev] gcc 4.8.x dragonegg support

Jack Howarth howarth at bromo.med.uc.edu
Sat May 11 16:41:40 PDT 2013


On Sat, May 11, 2013 at 02:55:44PM -0700, Peter Collingbourne wrote:
> On Thu, May 09, 2013 at 12:21:30PM -0400, Jack Howarth wrote:
> > On Wed, May 08, 2013 at 06:53:05AM -0700, Peter Collingbourne wrote:
> > > On Wed, May 08, 2013 at 09:25:55AM -0400, Jack Howarth wrote:
> > > > Duncan,
> > > >     I was wondering if you plan on supporting the build of dragonegg under gcc 4.8.1svn
> > > > for the llvm 3.3 release? Is the deprecation and poisoning of IDENT_ASM_OP too problematic
> > > > to work around without some additional substitute being added in FSF gcc upstream?
> > > 
> > > Hi Jack,
> > > 
> > > There's a patch under review to add gcc 4.8 support:
> > > http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20130401/170127.html
> > 
> > Peter,
> >    Thanks. With the second patch applied, current dragonegg 3.3svn builds under FSF gcc 4.8.1svn
> > with the plugin header fix applied. There appears to be a regression in the Polyhedron 2005
> > benchmarks for aermod and rnflow. The first fails to compile with the errror...
> > 
> > % /sw/lib/gcc4.8/bin/gfortran -fplugin=/sw/lib/gcc4.8/lib/dragonegg.so -specs=/sw/lib/gcc4.8/lib/integrated-as.specs -O1  aermod.f90 -o aermod
> > Undefined symbols for architecture x86_64:
> >   "_iround", referenced from:
> 
> I looked into this briefly.  I think iround is some kind of gcc
> intrinsic (like the lround function in C, except it returns an int).
> I don't have access to that benchmark suite nor do I know Fortran
> very well.  Can you try to construct a small reproducing test case
> given the above information about what this function does?

Peter,
   I believe this bug is triggered by the following change to gcc 4.8.0.

http://gcc.gnu.org/ml/gcc-patches/2012-03/msg01100.html

The testcase from that patch exposes the issue...

% cat iround.f90
function my_nint(x)
  implicit none
  real :: x
  integer :: my_nint
  my_nint = nint(x)
end function my_nint

% /sw/lib/gcc4.7/bin/gfortran -fplugin=/sw/lib/gcc4.7/lib/dragonegg.so -c iround.f90
% nm iround.o | grep iround
%
% /sw/lib/gcc4.8/bin/gfortran -fplugin=/sw/lib/gcc4.8/lib/dragonegg.so -c iround.f90
% nm iround.o | grep iround
                 U _iroundf
%
% /sw/lib/gcc4.7/bin/gfortran -c iround.f90
% nm iround.o | grep iround
%
% /sw/lib/gcc4.8/bin/gfortran -c iround.f90
% nm iround.o | grep iround
%

So only gfortran 4.8.0 with dragonegg seems to generate this undefined symbol for iroundf.
        Jack

> 
> Thanks,
> -- 
> Peter



More information about the llvm-dev mailing list