Re: [PATCH] dissect: fix multidimensional array initializer

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

 



I did not test it myself, but it looks seasonable to me.

BTW, did you look at the show-parse series of function?
It is a good example of how to traverse the symbol tree.
I would love to see dissect using similar structure. 
 
Chris

On Fri, Dec 15, 2006 at 12:35:47AM +0300, Oleg Nesterov wrote:
> dissect can't parse initializers like
> 
> 	struct T { int i; } a[2][3] = { [0][0] = {123} };
> 
> , output is:
> 
> 	   1:8   s def  T
> 	   1:21  g def  a                                struct T [3][2]
> 	   1:21  g -w-  a                                struct T [3][2]
> 	T.c:1:37: warning: bad expr->type: 25
> 
> with this patch applied:
> 
> 	   1:8   s def  T
> 	   1:21  g def  a                                struct T [3][2]
> 	   1:21  g -w-  a                                struct T [3][2]
> 	   1:43  s -w-  T.i                              int
> 
> Signed-off-by: Oleg Nesterov <oleg@xxxxxxxxxx>
> 
> --- DS/dissect.c~	2006-04-20 03:03:33.000000000 +0400
> +++ DS/dissect.c	2006-04-20 03:03:42.000000000 +0400
> @@ -507,10 +507,13 @@ static struct symbol *do_initializer(str
>  	default:
>  		do_expression(u_lval(type), expr);
>  
> +	break; case EXPR_INDEX:
> +		do_initializer(base_type(type), expr->idx_expression);
> +
>  	break; case EXPR_INITIALIZER:
>  		m_addr = 0;
>  		FOR_EACH_PTR(expr->expr_list, m_expr)
> -			if(type->type == SYM_ARRAY) {
> +			if (type->type == SYM_ARRAY) {
>  				m_type = base_type(type);
>  				if (m_expr->type == EXPR_INDEX)
>  					m_expr = m_expr->idx_expression;
-
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[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