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 <[EMAIL PROTECTED]>

--- 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 [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to