On Jul 26, 2011, at 9:54 PM, Douglas Gregor wrote: > On Jul 26, 2011, at 3:34 PM, Eli Friedman wrote: >> On Tue, Jul 26, 2011 at 3:28 PM, Sean Hunt <[email protected]> >> wrote: >>> On Tue, Jul 26, 2011 at 15:25, Eli Friedman <[email protected]> wrote: >>>> Author: efriedma >>>> Date: Tue Jul 26 17:25:31 2011 >>>> New Revision: 136161 >>>> >>>> URL: http://llvm.org/viewvc/llvm-project?rev=136161&view=rev >>>> Log: >>>> A couple minor issues with Sema for delete: >>>> >>>> 1. Attempting to delete an expression of incomplete class type should be >>>> an error, not a warning. >>>> >>>> 2. If someone tries to delete a pointer to an incomplete class type, make >>>> sure we actually emit >>>> the delete expression after we warn. >>> >>> Deleting an object of incomplete class type is well-formed; >>> [expr.delete]/5. This should not be an error. >> >> [expr.delete]/1: "The operand shall have a pointer to object type, or >> a class type having a single non-explicit conversion function (12.3.2) >> to a pointer to object type." An expression of incomplete class type >> isn't either of those. > > > An incomplete class type is an object type in C++.
But it's not a pointer to object type. The "object being deleted" per [expr.delete]p1 is not the operand of the delete function; if the operand is a pointer, then it's the object pointed to by that pointer, and otherwise it's the object pointed to by the pointer produced by the operand's requisite single non-explicit conversion function. Did you check out the actual patch? DiagnosticSemaKinds.td had err_delete_incomplete_class_type listed as a warning, not an error, and the warning path on deleting pointers to incomplete type was returning ExprError(). John.
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
