On Wed, Jan 23, 2019 at 04:17:30PM +0200, Jani Nikula wrote:
Can't have:
switch (i) {
int j;
case 0:
/* ... */
}
because it can't be turned into:
switch (i) {
int j = 0; /* not valid C */
case 0:
/* ... */
}
but can have e.g.:
switch (i) {
case 0:
{
int j = 0;
/* ... */
}
}
I think Kees' approach of moving such variable declarations to the
enclosing block scope is better than adding another nesting block.
Another nesting level would be bad, but I think this is OK:
switch (i) {
case 0: {
int j = 0;
/* ... */
}
case 1: {
void *p = q;
/* ... */
}
}
I can imagine Kees' patch might have a bad effect on stack consumption,
unless GCC can be relied on to be smart enough to notice the
non-overlapping liveness of the vriables and use the same stack slots
for both.