On Wed, 10 Nov 2010, Vasiliy Kulikov wrote:

> On Wed, Nov 10, 2010 at 16:28 +0100, Julia Lawall wrote:
> > It also occurred to me that in eg sizeof(*x), where x has type int *, the 
> > reference to *x is not really a reference to an integer value, and the 
> > reference to x is not really a reference to an integer pointer value.  
> > Thus there is no longer any type inference for the argument to sizeof.  If 
> > this seems like a bad decision, please let me know and I will change it 
> > back.
> 
> Why?..  I don't see any troubles with it.  The only uniqueness of
> sizeof() is that it doesn't really calculates its argument, e.g. 
> after "int a = 1; sizeof(a++);" a is still 1, but AFAIU this should not
> influence on coccinelle.

I'm not clear on what you are suggesting.  Suppose you have the following 
semantic patch:

@@
int x;
@@

- x
+ ANINT(x)

and the code:

int x;
foo(sizeof(x));

Do you want to obtain:

int x;
foo(sizeof(ANINT(x)));

or:

int x;
foo(sizeof(x));

> But it is impossible to differ wrong type passing to memset:
> 
> struct X *ll;
> memset(ll, 0, sizeof(*ll));
> 
> vs.
> 
> struct X *ll; /* l + l */
> struct Y *l1; /* l + 1 (number one) */
> memset(ll, 0, sizeof(*l1));

OK, I guess.  But perhaps the above code would be wrong even if both ll 
and l1 had type struct X *?

> Also, is there any way to explicitly specify sizeof(int/long/void*) by
> command line argument?

No, I haven't gotten to this one yet...

julia
_______________________________________________
Cocci mailing list
[email protected]
http://lists.diku.dk/mailman/listinfo/cocci
(Web access from inside DIKUs LAN only)

Reply via email to