52db16fde4
* special/981006-1.c: New test. Make sure gcc doesn't lose track of the possible targets of tablejump insns. * special/special.exp: Run it. From-SVN: r22899
51 lines
982 B
C
51 lines
982 B
C
/* Test that tablejump insns are correctly handled. If the compiler
|
|
loses track of the jump targets, it will report that x and y can be
|
|
used uninitialized.
|
|
|
|
This is broken in egcs 1998/10/06 for mips in pic mode. */
|
|
/* { dg-do compile } */
|
|
|
|
int foo (int a, int b)
|
|
{
|
|
__label__ z;
|
|
int x; /* { dg-bogus "warning: `.' might be used uninitialized in this function" } */
|
|
int y; /* { dg-bogus "warning: `.' might be used uninitialized in this function" } */
|
|
static void *p;
|
|
|
|
switch (a) {
|
|
case 2:
|
|
x = 4;
|
|
break;
|
|
case 4:
|
|
x = 6;
|
|
break;
|
|
case 8: case 10: case 13: case 11: case 17: case 19:
|
|
x = 7;
|
|
break;
|
|
default:
|
|
x = -1;
|
|
break;
|
|
}
|
|
switch (b) {
|
|
case 2:
|
|
y = 4;
|
|
break;
|
|
case 4:
|
|
y = 6;
|
|
break;
|
|
case 8: case 10: case 13: case 11: case 17: case 19:
|
|
y = 7;
|
|
break;
|
|
default:
|
|
y = -1;
|
|
break;
|
|
}
|
|
z:
|
|
p = &&z;
|
|
return x * y;
|
|
}
|
|
int main (int argc, char *argv[])
|
|
{
|
|
return 1 == foo (argc, argc + 1);
|
|
}
|