bkelley added inline comments.
================
Comment at: lib/Sema/SemaInit.cpp:6681
// full-expression's cleanups.
- if ((S.getLangOpts().ObjCAutoRefCount &&
- MTE->getType()->isObjCLifetimeType()) ||
+ if (MTE->getType()->isNonTrivialObjCLifetimeType() ||
(MTE->getStorageDuration() == SD_Automatic &&
----------------
rjmccall wrote:
> Oh, I see what's happening here. The special case for ARC is actually wholly
> unnecessary. The code's been written as if MTE->getType() for an ARC
> temporary will just have type "id". In fact, it'll have a lifetime-qualified
> type, dependent on the type of the reference which has been bound to it. So
> we need to mark that there's a temporary cleanup if the type has non-trivial
> lifetime, i.e. if MTE->getType().hasNonTrivialObjCLifetime(); but this is
> already considered as part of MTE->getType().isDestructedType(), and the
> storage-duration condition there is correct as well. So really we should
> just delete this entire clause.
>
> That should eliminate the need for Type::isNonTrivialObjCLifetimeType(). In
> general, we don't want methods like that to ever exist: lifetime is
> determined by qualifiers, and querying a Type instead of a QualType has the
> potential to implicitly remove qualifiers.
Thanks for looking in to this and for the explanation. I've removed the check
and the changes to Type.
https://reviews.llvm.org/D31007
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits