Eric Blake <ebl...@redhat.com> writes:

> On 08/17/2018 10:05 AM, Markus Armbruster wrote:
>> Bonus: static json_lexer[] loses its unused elements.  It shrinks from
>> 8KiB to 4.75KiB for me.
>>
>> Signed-off-by: Markus Armbruster <arm...@redhat.com>
>> Reviewed-by: Eric Blake <ebl...@redhat.com>
>> ---
>
>>           ['a' ... 'z'] = IN_KEYWORD,
>> -        [' '] = IN_WHITESPACE,
>> -        ['\t'] = IN_WHITESPACE,
>> -        ['\r'] = IN_WHITESPACE,
>> -        ['\n'] = IN_WHITESPACE,
>> +        [' '] = IN_START,
>> +        ['\t'] = IN_START,
>> +        ['\r'] = IN_START,
>> +        ['\n'] = IN_START,
>>       },
>>       [IN_START_INTERPOL]['%'] = IN_INTERPOL,
>> +    [IN_START_INTERPOL][' '] = IN_START_INTERPOL,
>> +    [IN_START_INTERPOL]['\t'] = IN_START_INTERPOL,
>> +    [IN_START_INTERPOL]['\r'] = IN_START_INTERPOL,
>> +    [IN_START_INTERPOL]['\n'] = IN_START_INTERPOL,
>
> Hmm, if we did this:
>
> [IN_START_INTERPOL] {
>   ['%'] = IN_INTERPOL,
>   ['\t'] = IN_START_INTERPOL,
> ...
> }
>
> for similarity with all our other constructs, will gcc remember that
> we've already initialized other members not listed in the clause
> before, or will it mistakenly re-0-initialize the array members not
> mentioned?

Fails make check.

(gdb) p json_lexer[IN_START_INTERPOL]
$1 = "\000\000\000\000\000\000\000\000\000\016\016\000\000\016", '\000' 
<repeats 18 times>, "\016\000\000\000\000\035", '\000' <repeats 217 times>
(gdb) p json_lexer[IN_START]
$2 = "\000\000\000\000\000\000\000\000\000\r\r\000\000\r", '\000' <repeats 18 
times>, 
"\r\000\020\000\000\000\000\022\000\000\000\000\006\033\000\000\023\032\032\032\032\032\032\032\032\032\005",
 '\000' <repeats 32 times>, "\003\000\004\000\000\000", '\034' <repeats 26 
times>, "\001\000\002", '\000' <repeats 129 times>

Reply via email to