/* Copyright (C) 2003  Free Software Foundation.

   Test that switch statements suitable using case bit tests are
   implemented correctly.

   Written by Roger Sayle, 01/25/2001.  */

extern void abort (void);

int
foo (int x)
{
  switch (x)
    {
    case 4:
    case 6:
    case 9:
    case 11:
      return 30;
    }
  return 31;
}

int
main ()
{
  int i, r;

  for (i=-1; i<66; i++)
    {
      r = foo (i);
      if (i == 4)
	{
	  if (r != 30)
	    abort ();
	}
      else if (i == 6)
	{
	  if (r != 30)
	    abort ();
	}
      else if (i == 9)
	{
	  if (r != 30)
	    abort ();
	}
      else if (i == 11)
	{
	  if (r != 30)
	    abort ();
	}
      else if (r != 31)
	abort ();
    }
  return 0;
}
