> On Oct 1, 2014, at 5:29 PM, John McCall <[email protected]> wrote: > > On Oct 1, 2014, at 5:09 PM, Argyrios Kyrtzidis <[email protected] > <mailto:[email protected]>> wrote: >>> On Oct 1, 2014, at 4:52 PM, John McCall <[email protected] >>> <mailto:[email protected]>> wrote: >>> >>> On Oct 1, 2014, at 4:34 PM, Argyrios Kyrtzidis <[email protected] >>> <mailto:[email protected]>> wrote: >>>> + John >>>> >>>> John, could you advice here ? >>>> >>>>> On Oct 1, 2014, at 4:20 PM, Marshall Clow <[email protected] >>>>> <mailto:[email protected]>> wrote: >>>>> >>>>> On Oct 1, 2014, at 3:36 PM, Marshall Clow <[email protected] >>>>> <mailto:[email protected]>> wrote: >>>>>> >>>>>> Richard Smith pointed out that destroying a pointer to an objective-C >>>>>> class might require an ARC call, and so the compiler needs to see the >>>>>> type to figure out if it is_destructible. >>>>>> >>>>>> Note that is_destructible<ObjCForwardClass**>::value is true, so it’s >>>>>> just pointers to objective-C objects, not pointers in general. >>>>> >>>>> Richard also pointed me to: >>>>> http://clang.llvm.org/docs/AutomaticReferenceCounting.html#retainable-object-pointers >>>>> >>>>> <http://clang.llvm.org/docs/AutomaticReferenceCounting.html#retainable-object-pointers> >>>>> >>>>> So, while I agree with Argyrios that this changed the behavior of >>>>> is_trivially_destructible for forward-declared objective-C classes, >>>>> I am now convinced that the old behavior was incorrect, and the new >>>>> behavior is “better”. >>>>> >>>>> One could argue that a forward-declared objective-C class is not a >>>>> complete type, since the compiler doesn’t know how to destroy it, and if >>>>> so, then is_destructible is not required to give any answer at all ("T >>>>> shall be a complete type”). >>> >>> Pointers to forward-declared Objective-C classes are still complete types. >>> They should be both destructible and (outside of ARC) non-trivially >>> destructible. >>> >>> I assume the problem here is ObjC property syntax, which usually looks like >>> “foo.prop” where foo has ObjC pointer type. Type-checking a property >>> access really does require the type to be complete. However, >>> pseudo-destructor calls are not property accesses, and should not require >>> the pointee type to be complete. >>> >>> Does that answer your question? >> >> Are you suggesting that we make compiler changes to accept the >> pseudo-destructor call for ObjC pointers > > Yes. We already accept the pseudo-destructor call if the interface type is > complete, presumably without actually looking anything up in the interface. > We just unnecessarily bail out early if the interface is incomplete, despite > it being a pseudo-destructor call. > >> , and if yes, what would the codegen behavior be for ARC ? > > That doesn’t need to change.
Thank you! Filed: http://llvm.org/bugs/show_bug.cgi?id=21128 > > John.
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
