[cfe-dev] Why the argument of `delete' is converted to void* ?

Jean-Daniel Dupas devlists at shadowlab.org
Wed Jul 4 05:01:36 PDT 2012


Le 4 juil. 2012 à 12:42, Enea Zaffanella a écrit :

> We have noticed that, in the AST produced by clang, the expression 
> argument of a CXXDeleteExpr node is implicitly converted to void*:
> 
> # cat delete.cc
> struct S {};
> 
> void free(S* ps) {
>   delete ps;
> }
> 
> # llvm/Debug+Asserts/bin/clang -cc1 -ast-dump delete.cc
> [...]
> void free(S *ps) (CompoundStmt 0x4822650 <delete.cc:3:18, line:5:1>
>   (CXXDeleteExpr 0x4822628 <line:4:3, col:10> 'void'
>     (ImplicitCastExpr 0x4821df8 <col:10> 'void *' <BitCast>
>       (ImplicitCastExpr 0x4821de0 <col:10> 'struct S *' <LValueToRValue>
>         (DeclRefExpr 0x4821db8 <col:10> 'struct S *' lvalue ParmVar 
> 0x47eeb20 'ps' 'struct S *')))))
> 
> 
> What are the reasons for introducing such an implicit cast?
> 
> Enea.

Just a though, but isn't it because the signature of delete is:

operator delete(void *);

 Jean-Daniel





More information about the cfe-dev mailing list