------- Comment #2 from rguenth at gcc dot gnu dot org  2009-10-03 11:41 -------
Ok, I have some new reduced testcases:

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

slufactor.3.ii
---------------
typedef double Real;
class Vector {
    int dimen;
    Real* val;
public:
    Vector& operator=(const Vector& vec);
    Vector(int p_dimen, Real *p_val)
        : dimen(p_dimen), val(p_val)    { }       
    int dim() const;
};
class DVector : public Vector {
public:
    void reDim(int newdim);
    explicit DVector(const Vector& old);
    DVector& operator=(const Vector& vec)    {
        reDim(vec.dim());
        Vector::operator=(vec);
    }
};
class SLUFactor  {
    DVector vec;
    void solveRight (Vector& x, const Vector& b);
};
void SLUFactor::solveRight (Vector& x, const Vector& b) {
    vec = b;
}
-----------

no more ODR violations and a testcase with link-time errors:

> g++ -o t slufactor.3.ii dvector.3.ii -flto -O -fPIC
/tmp/ccu9746J.lto.o: In function `_ZN7DVectorC1ERK6Vector':
cccxaZqP.o:(.text+0xa1): undefined reference to `_ZN7DVectoraSERK6Vector'
/tmp/ccu9746J.lto.o: In function `_ZN7DVectorC2ERK6Vector':
cccxaZqP.o:(.text+0xd9): undefined reference to `_ZN7DVectoraSERK6Vector'
collect2: ld returned 1 exit status
> g++ -o t dvector.3.ii slufactor.3.ii -flto -O -fPIC

works w/o -fPIC and w/o -flto.


-- 


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

Reply via email to