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

Reply via email to