rnk added a comment.

I discussed this with @rsmith and we think the correct fix is to update the 
DefinitionData bits computed when adding special members. I haven't reviewed 
this patch in detail, but we came to the conclusion that Clang's optimization 
to avoid implicit special member declarations in most situations makes it 
impossible to get the correct answer in all situations here. The explicit loop 
over `RD->ctors()` is a bug in itself, because important ones may not be there.
I'm never able to remember the details, but we believe that's the "right" fix. 
This would change the values reported by some of the older pre-c++11 GCC type 
traits (the __has_* ones, I think), but modern versions of libstdc++ no longer 
use them.

We're hesitant to accept a workaround in the meantime because it means we'll 
have to fix the bug again later and create another ABI break with ourselves. 
However, we shouldn't let the perfect be the enemy of the good. In practice, I 
suspect we are not very good about maintaining ABI stability in corner cases 
this deep.


Repository:
  rL LLVM

https://reviews.llvm.org/D35056



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

Reply via email to