Re: sparse-llvm array size computation issue

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

 



Hi Luc,

On 29 March 2017 at 12:32, Dibyendu Majumdar <mobile@xxxxxxxxxxxxxxx> wrote:
> 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.
>

I looked at this again briefly today. I think that not having the size
information on the array type poses some problems.

+ will instructions have access to the SYM_NODE always? It doesn't
appear to be the case.
+ sparse-llvm caches the symbol's type in symbol->aux. For array
types, we would still need to do this - storing the type against
SYM_NODE objects is probably not correct.

So I feel that given that the size is an integral part of the array
type then it makes sense that it should be present on the array type.
In the testing I have done so far, this appears to work fine (although
I have not yet run the sparse tests - only my own tests).

Thanks and 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



[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