Thanks.  Unfortunately that's one of the ways we figured it out :(.

The status quo, before this commit, was an ABI difference between Objective-C++ 
(-fobjc-arc) and C++/Objective-C++ (-fno-objc-arc), which is... really bad.  
But rare enough I guess it took a couple of years to find.

I suspect/hope the break from this commit will be even more rare in practice, 
since it's somewhat odd to vend Objective-C++ APIs.  Usually the 
(Objective-)C++ parts are implementation details beneath a pure Objective-C 
API, and if you recompile one TU you'll recompile the rest.

Since you brought up the ABI difference... there's still at least one lurking: 
C++98/C++03 vs. C++11 are ABI-incompatible for things like std::cv_status.  I'm 
not sure how (or whether we should bother) to fix that; it's a little strange 
that we expose strong enums to pre-C++11 at all.

> On Mar 31, 2017, at 13:37, Eric Fiselier <e...@efcs.ca> wrote:
> 
> This will be ABI breaking for Objective-C++ users. I'm not objecting to 
> fixing the bogus configuration, but I just wanted to point it out.
> 
> /Eric
> 
> On Fri, Mar 31, 2017 at 11:39 AM, Duncan P. N. Exon Smith via cfe-commits 
> <cfe-commits@lists.llvm.org <mailto:cfe-commits@lists.llvm.org>> wrote:
> Author: dexonsmith
> Date: Fri Mar 31 12:39:56 2017
> New Revision: 299236
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=299236&view=rev 
> <http://llvm.org/viewvc/llvm-project?rev=299236&view=rev>
> Log:
> Use strong enums independently of -fobjc-arc
> 
> r145698 introduced _LIBCPP_HAS_NO_STRONG_ENUMS by copy-pasting the
> __has_feature check from objc_arc_weak/_LIBCPP_HAS_OBJC_ARC_WEAK, and
> accidentally started defining _LIBCPP_HAS_NO_STRONG_ENUMS whenever
> __has_feature(objc_arc_weak).  This is totally bogus, and means that
> Libc++ thinks Objective-C++ compilations with -fobjc-arc don't have
> strong enums.
> 
> Delete the accidental line.
> 
> I thought about adding a test, but it would be entirely duplicative of
> the patch (if has-feature strong enums, check that has-no-strong-enums
> is not defined).
> 
> Modified:
>     libcxx/trunk/include/__config
> 
> Modified: libcxx/trunk/include/__config
> URL: 
> http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__config?rev=299236&r1=299235&r2=299236&view=diff
>  
> <http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__config?rev=299236&r1=299235&r2=299236&view=diff>
> ==============================================================================
> --- libcxx/trunk/include/__config (original)
> +++ libcxx/trunk/include/__config Fri Mar 31 12:39:56 2017
> @@ -348,7 +348,6 @@ typedef __char32_t char32_t;
> 
>  #if __has_feature(objc_arc_weak)
>  #define _LIBCPP_HAS_OBJC_ARC_WEAK
> -#define _LIBCPP_HAS_NO_STRONG_ENUMS
>  #endif
> 
>  #if !(__has_feature(cxx_constexpr))
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits@lists.llvm.org <mailto:cfe-commits@lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits 
> <http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits>
> 

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to