On Tue, Mar 28, 2017 at 10:14:43PM +0100, Dibyendu Majumdar wrote: > Hi Luc, > > I think that there is a bug in examine_node_type() in symbol.c - it > should set the base_type's bit_size perhaps? See the line marked as > FIX below, > > /* Unsized array? The size might come from the initializer.. */ > if (bit_size < 0 && base_type->type == SYM_ARRAY) { > struct expression *initializer = get_symbol_initializer(sym); > if (initializer) { > struct symbol *node_type = base_type->ctype.base_type; > int count = count_array_initializer(S, node_type, initializer); > > if (node_type && node_type->bit_size >= 0) > bit_size = array_element_offset(S->C->target, node_type->bit_size, count); > base_type->bit_size = bit_size; /*** FIX set base_type->bit_size ***/ > } > } Yes, it's correct and will fix most aspects of the issue but it's only part of the fix: - array_size need also to be updated - the SYM_ARRAY can't be directly updated because it can be shared between several nodes, so it need to be duplicated before being updated. -- Luc -- 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