* variable size array declarations
@ 2011-10-31 14:08 Dan Carpenter
2011-11-17 8:13 ` Dan Carpenter
0 siblings, 1 reply; 2+ messages in thread
From: Dan Carpenter @ 2011-10-31 14:08 UTC (permalink / raw)
To: linux-sparse
[-- Attachment #1: Type: text/plain, Size: 618 bytes --]
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.
So if I have:
char buf[a + b + *c + 4];
Smatch gets:
char buf[*a + *b + **c + 4];
I'm not sure where this is getting changed or why.
regards,
dan carpenter
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: variable size array declarations
2011-10-31 14:08 variable size array declarations Dan Carpenter
@ 2011-11-17 8:13 ` Dan Carpenter
0 siblings, 0 replies; 2+ messages in thread
From: Dan Carpenter @ 2011-11-17 8:13 UTC (permalink / raw)
To: linux-sparse
[-- Attachment #1: Type: text/plain, Size: 1161 bytes --]
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 #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-11-17 8:12 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-10-31 14:08 variable size array declarations Dan Carpenter
2011-11-17 8:13 ` Dan Carpenter
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).