Re: -fvisibility=hidden vs. typeinfo

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 06/29/2015 12:33 PM, Jonathan Wakely wrote:
On 29 June 2015 at 09:58, Avi Kivity wrote:
I have some code that looks like

   void some_function() throw (std::out_of_range) {
       ... call to std::map<>::at() which throws out_out_range
   }

if I compile with -fvisibility=hidden, this code calls terminate(). My
suspicion is that I ended up with two copies of the typeinfo block for
std::out_of_range; one used by std::__throw_out_of_range() in libstdc++, and
another in the guard code generated by the compiler.  Since they don't
match, the guard block terminates.

Is this correct?  If so, is this a bug in libstdc++, or the compiler (or the
linker)?  If not, what can I do to fix this?

I wasn't able to generate a self contained test case quickly, but if there's
no other way, I'll invest more effort into it.
I think this is supposed to work, because type matching should be done
using typeinfo names not just the identity of the typeinfo obejcts.

Does that work for derived exceptions as well?  e.g.

void f() throw (foo) {
  try {
     throw(bar());
  } catch (bar&) {
     std::throw_with_nested(foo());
  }
}

I'll try to reduce the testcase I have.



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux