
char x;

/* Valid switch statement */
#ifdef TEST1
char foo(void)
{
  switch(x)
    {
      char y;
      
      case 0:
        return 0;
      case 1:
        return 1;
      default:
        y = x+1;
        return y;
    }
}
#endif

/* Error, duplicate cases */
#ifdef TEST2
char foo(void)
{
  switch(x)
    {
      char y;
      
      case 0:		/* IGNORE */
        return 0;
      case 1:
        return 1;
      case 0:		/* ERROR */
        return 0;
      default:
        y = x;
        return y;
    }
}
#endif

/* Error, more than one default */
#ifdef TEST3
char foo(void)
{
  switch(x)
    {
      char y;
      
      case 0:
        return 0;
      case 1:
        return 1;
      default:		/* IGNORE */
        y = x;
        return y;
      default:		/* ERROR */
        return 2;
    }
}
#endif

/* Warn about unreachable code */
#ifdef TEST4
char foo(void)
{
  switch(x)
    {
      char y; /* IGNORE */
      x++;		/* WARNING(SDCC) */
      
      case 0:
        return 0;
      case 1:
        return 1;
      default:
        y = x;
        return x;
    }
}
#endif

/* Warn about unreachable initializer */
#ifdef TEST5
char foo(void)
{
  switch(x)
    {
      char y=1;		/* WARNING(SDCC) */
      
      case 0:
        return 0;
      case 1:
        return 1;
      default:
        return y;	/* IGNORE */
    }
}
#endif

/* Error, missing switch */
#ifdef TEST6
char foo(void)
{
    {
      case 0:		/* ERROR */
        return 0;
      case 1:		/* ERROR */
        return 1;
      default:		/* ERROR */
        return x;
    }
}
#endif

/* Error, switch condition must be integral */
#ifdef TEST7
char foo(void)
{
  float f; /* IGNORE */
  f=x;
  switch(f)		/* ERROR */
    {
      char y; /* IGNORE */
      
      case 0:
        return 0;
      case 1:
        return 1;
      default:
        y = x;
        return x;
    }
  return 0;
}
#endif

/* Error, cases must be integral */
#ifdef TEST8
char foo(void)
{
  switch(x)
    {
      char y; /* IGNORE */
      
      case 0.0:		/* ERROR */
        return 0;
      case 1:
        return 1;
      default:
        y = x;
        return x;
    }
}
#endif

