On Fri, Nov 08, 2013 at 11:46:20PM -0000, Rafael Espindola wrote:
> Author: rafael
> Date: Fri Nov  8 17:46:20 2013
> New Revision: 194296
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=194296&view=rev
> Log:
> Use rauw for all discardable aliases, not just linkonce_odr.

This breaks boost::locale and possibly other things. Attached is a test
case. Compile with -O2 -std=c++11 before and after and look for
    std::__1::moneypunct_byname<char, false>::~moneypunct_byname
in the nm -C output.

Joerg
extern "C" namespace std
{
inline namespace __1
{
class locale
{
public:
    class facet;
    template < class _Facet > locale (locale &, _Facet *);
};
class locale::facet
{
protected:
    virtual ~ facet ();
};
class A:locale::facet
{
public:
    A (int):locale::facet ()
    {
    }
};
template < class, bool > class moneypunct_byname:A
{
public:
    moneypunct_byname (int *, int):A (0)
    {
    } ~moneypunct_byname ()
    {
    }
};
extern template class moneypunct_byname < char, 0 >;
namespace
{
class B:std::moneypunct_byname < char, 0 >
{
    B ():std::moneypunct_byname < char, 0 > (0, 0)
    {
    }
};
void fn1 (std::locale & p1)
{
    switch (0)
    case 0:
{
std:
    locale a = std::locale (p1, new int);
    std::locale (a, new B);
    }
}
}
}
}
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to