Hi Luc, On 28 March 2017 at 23:21, Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx> wrote: >> >> 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 ***/ >> >> } >> >> } >> > >> > I'm far from sure. >> > Yes, here it will works but in general you have no idea who else is >> > using the base_type. For other users it may be legitimally still >> > be unsized. >> > >> >> I saw that if I set the array size in the C code then >> base_type->bit_size gets set. So my reasoning was that this is okay, >> as only the way the size is determined is changed, but the array still >> has a size. What do you think? > > Yes, that's normal. > The SYM_ARRAY has its size set if the size is given. > > Otherwise the size will: > -) stay unsized. For example, extern int array[] in an include > Most files will just see it and use it like this, and only > a single file will define the array and give it a size. > -) will receive a size later, at the end of the initialization. > In this case, the array is given a SYM_NODE and the size > is set there. > > Important information is stored in the SYM_NODE and it's wrong > to just jump over it. > Okay thank you for the insight. It seems then that sparse-llvm is not handing this correctly. Regards Dibyendu -- 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