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 cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits