yacc: use the most appropriate integral type for state numbers
commit2ca6b719674228fa2f77f6627e78111a757b83cc
authorAkim Demaille <akim.demaille@gmail.com>
Sat, 28 Sep 2019 11:48:35 +0000 (28 13:48 +0200)
committerAkim Demaille <akim.demaille@gmail.com>
Mon, 30 Sep 2019 16:31:55 +0000 (30 18:31 +0200)
tree3b6f8b94e91f03f2625d0cfe494712ed0672fdfa
parent871c02b327d16bf131ab5352aa9f23650604a4d4
yacc: use the most appropriate integral type for state numbers

Currently we properly use the "best" integral type for tables,
including those storing state numbers.  However the variables for
state numbers used in yyparse (and its dependencies such as
yy_stack_print) still use int16_t invariably.  As a consequence, very
large models overflow these variables.

Let's use the "best" type for these variables too.  It turns out that
we can still use 16 bits for twice larger automata: stick to unsigned
types.

However using 'unsigned' when 16 bits are not enough is troublesome
and generates tons of warnings about signedness issues.  Instead,
let's use 'int'.

Reported by Tom Kramer.
https://lists.gnu.org/archive/html/bug-bison/2019-09/msg00018.html

* data/skeletons/yacc.c (b4_state_num_type): New.
(yy_state_num): Be computed from YYNSTATES.
* tests/linear: New.
* tests/torture.at (State number type): New.
Use it.
THANKS
data/skeletons/yacc.c
tests/linear [new file with mode: 0755]
tests/local.mk
tests/torture.at