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>