[re-send to lists.llvm.org] [necromancy] This is causing some strangeness for users of libc++ headers that ship dylibs and build with -fno-rtti and -fvisibility=hidden.
Strangely, -fno-rtti does *not* imply -fno-exceptions; the type info needed for exceptions is generated on-the-fly. This means that each translation unit generates a linkonce_odr copy of the std::exception type info -- weird, but kind of reasonable? Because of this commit, the (non-canonical) type info from these other dylibs is getting exported, even though they compile with -fvisibility=hidden. On Darwin, this means that a link line like this: -- $ ld -o a.out a.o -library-without-rtti -lc++ -- will find the type info in libibrary-without-rtti.dylib instead of libc++.1.dylib. That doesn't seem reasonable. The request I've had from such dylib owners is to effectively revert this commit, so that their copy of std::exception type info isn't exported when they use -fvisibility=hidden. However, then their copy of the type info won't get coalesced with libc++.1.dylib's. Does anyone have an opinion on this? Should we care about the visibility of std::exception type info when -fno-rtti? (Note that when RTTI is on, clang correctly does not generate the type info for std::exception and friends.) Howard, any chance you remember more about the problems this fixed? > On 2013-Dec-04, at 13:03, Howard Hinnant <hhinn...@apple.com> wrote: > > Author: hhinnant > Date: Wed Dec 4 15:03:23 2013 > New Revision: 196411 > > URL: http://llvm.org/viewvc/llvm-project?rev=196411&view=rev > Log: > Give all members of exception types default visibility. Lack of this is > causing some illegal code relocations rare and hard to reproduce cases. > > Modified: > libcxx/trunk/include/__config > > Modified: libcxx/trunk/include/__config > URL: > http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__config?rev=196411&r1=196410&r2=196411&view=diff > ============================================================================== > --- libcxx/trunk/include/__config (original) > +++ libcxx/trunk/include/__config Wed Dec 4 15:03:23 2013 > @@ -194,7 +194,7 @@ > #endif > > #ifndef _LIBCPP_EXCEPTION_ABI > -#define _LIBCPP_EXCEPTION_ABI _LIBCPP_TYPE_VIS > +#define _LIBCPP_EXCEPTION_ABI __attribute__ ((__visibility__("default"))) > #endif > > #ifndef _LIBCPP_ALWAYS_INLINE > > > _______________________________________________ > cfe-commits mailing list > cfe-comm...@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits