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