public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug lto/41552]  New: Undefined references with -flto, dependent on object file ordering
@ 2009-10-03 10:55 rguenth at gcc dot gnu dot org
  2009-10-03 11:26 ` [Bug lto/41552] " rguenth at gcc dot gnu dot org
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2009-10-03 10:55 UTC (permalink / raw)
  To: gcc-bugs

> ./g++ -B. -fPIC -O -flto -c dvector.3.ii slufactor.3.ii
> ./g++ -nostdlib -B. -fPIC -O -shared -o t slufactor.3.o dvector.3.o
> nm t | grep _ZN6soplex7DVectoraSERKNS_6VectorE
> ./g++ -nostdlib -B. -fPIC -O -shared -o t dvector.3.o slufactor.3.o
> nm t | grep _ZN6soplex7DVectoraSERKNS_6VectorE
> ./g++ -nostdlib -B. -fPIC -O -shared -o t dvector.3.o slufactor.3.o -flto
> nm t | grep _ZN6soplex7DVectoraSERKNS_6VectorE
                 U _ZN6soplex7DVectoraSERKNS_6VectorE
> ./g++ -nostdlib -B. -fPIC -O -shared -o t slufactor.3.o dvector.3.o -flto
> nm t | grep _ZN6soplex7DVectoraSERKNS_6VectorE
00000000000004f2 W _ZN6soplex7DVectoraSERKNS_6VectorE

WTF?  1) That function probably is inlined without lto, 2) Obviously the
merged cgraph is dependent on the ordering of object files on the link
command line...

slufactor.3.ii:
---------------
namespace soplex {
    class Vector {
    public:
        Vector& operator=(const Vector& vec);
        int dim() const    { }
    };
    class DVector : public Vector {
    public:
        void reDim(int newdim);
        DVector& operator=(const Vector& vec)    {
            if (vec.dim() != dim())
              reDim(vec.dim());
            Vector::operator=(vec);
        }
    };
    class SLinSolver { };
    class CLUFactor { };
    class SLUFactor : public SLinSolver, private CLUFactor {
        DVector vec;
        void solveRight (Vector& x, const Vector& b);
    };
    void SLUFactor::solveRight (Vector& x, const Vector& b) {
        vec = b;
        vec = b;
    }
}
----------

dvector.3.ii:
------------
namespace soplex {
    typedef double Real;
    class Vector {
        int dimen;
        Real* val;
    public:
        Vector(int p_dimen, Real *p_val)
            : dimen(p_dimen)       , val(p_val)    { }
        int dim() const    {
            return dimen;
        }
    };
    class DVector : public Vector {
        Real* mem;
        void reDim(int newdim);
        explicit DVector(const Vector& old);
        DVector& operator=(const Vector& vec)    {
            if (vec.dim() != dim())
              reDim(vec.dim());
        }
    };
    DVector::DVector(const Vector& old)
        : Vector(0, 0)    , mem( 0 )
      {
        *this = old;
      }
}
----------


-- 
           Summary: Undefined references with -flto, dependent on object
                    file ordering
           Product: gcc
           Version: 4.5.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: lto
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: rguenth at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41552


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2009-10-05 14:17 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-10-03 10:55 [Bug lto/41552] New: Undefined references with -flto, dependent on object file ordering rguenth at gcc dot gnu dot org
2009-10-03 11:26 ` [Bug lto/41552] " rguenth at gcc dot gnu dot org
2009-10-03 11:41 ` rguenth at gcc dot gnu dot org
2009-10-03 11:59 ` rguenth at gcc dot gnu dot org
2009-10-03 13:20 ` rguenth at gcc dot gnu dot org
2009-10-04 13:47 ` rguenth at gcc dot gnu dot org
2009-10-05 14:06 ` rguenth at gcc dot gnu dot org
2009-10-05 14:17 ` rguenth at gcc dot gnu dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).