[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