http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55721
--- Comment #13 from Steve Ellcey <sje at gcc dot gnu.org> 2013-01-09 23:09:15
UTC ---
Here is a C++ test case in case it involves differences from the C examples.
This comes from libstdc++-v3/libsupc++/pointer_type_info.cc
% cat bug4.cc
namespace std
{
class type_info {
public:
bool operator==(const type_info& __arg) const
{
return (__name[0] != '*' && __builtin_strcmp (__name, __arg.__name) ==
0);
}
virtual bool __is_function_p() const;
const char *__name;
};
}
class __pbase_type_info : public std::type_info
{
public:
const std::type_info* __pointee;
};
class __pointer_type_info : public __pbase_type_info
{
virtual bool
__pointer_catch(const __pbase_type_info* __thr_type, void** __thr_obj,
unsigned __outer) const;
};
bool __pointer_type_info::__pointer_catch (const __pbase_type_info
*thrown_type,
void **thr_obj,
unsigned outer) const
{
if (outer < 2 && *__pointee == typeid (void))
return !thrown_type->__pointee->__is_function_p ();
}
g++ -c -mips64r2 -mabi=64 -O2 -g bug4.cc
bug4.cc: In member function 'virtual bool
__pointer_type_info::__pointer_catch(const __pbase_type_info*, void**, unsigned
int) const':
bug4.cc:24:6: note: non-delegitimized UNSPEC unknown (230) found in variable
location
bool __pointer_type_info::__pointer_catch (const __pbase_type_info
*thrown_type,
^
%