Re: variable size array declarations

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Oct 31, 2011 at 05:08:29PM +0300, Dan Carpenter wrote:
> I am trying to check something in Smatch with variable size arrays
> and I'm running into problems.  Here is the function I'm trying to
> parse.
> 
> void func(int x)
> {
> 	char buf[x];
> }
> 
> Array symbols have an ->array_size.  It gets set correctly in parse.c
> to expression of type EXPR_SYMBOL.  But by the time I parse it in
> Smatch the ->array_size is now an EXPR_PREOP (a dereference).  In
> fact all the variables seem to get change to dereferences of the
> variables.
>

I tracked this down.  In smatch, how I use sparse is that I call
sparse_keep_tokens() and then I parse the resulting symbol list
myself.

In examine_array_type() we call get_expression_value() which changes
the symbols from normal symbols to dereferences.  The call tree is:
examine_array_type()
-> get_expression_value()
   -> __get_expression_value()
      -> evaluate_expression()
         -> evaluate_symbol_expression() <- change happens here.

The problem for me is that not all expressions have been evualated
like this so it's not consistent.

regards,
dan carpenter

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux