/* This testcase could not assemble on ppc32, because the compiler assumed
   the huge ADDR_DIFF_VEC will be emitted into rodata section, yet because
   of some notes inserted between jump table's CODE_LABEL and the jump table
   it ended up in the .text section and thus shorten_branches couldn't
   figure out branch to lab is too far.  */
/* { dg-do link { target fpic } } */
/* { dg-options "-g -fpic" } */
/* { dg-bogus "\[Uu\]nresolved symbol .(_GLOBAL_OFFSET_TABLE_|\[_.A-Za-z\]\[_.0-9A-Za-z\]*@(PLT|GOT|GOTOFF))" "PIC unsupported" { xfail *-*-netware* } 0 } */
/* { dg-require-effective-target int32plus } */

#define A(n) \
  case n##1: return n##1 * 131 + 63;	\
  case n##3: return n##3 * 1231 + 182;	\
  case n##5: return n##5 * 351 + 1;	\
  case n##7: return n##7 * 312 + 61;	\
  case n##9: return n##9 * 17 - 1;
#define B(n) \
A(n##0) A(n##1) A(n##2) A(n##3) A(n##4) \
A(n##5) A(n##6) A(n##7) A(n##8) A(n##9)
#define C(n) \
B(n##0) B(n##1) B(n##2) B(n##3) B(n##4) \
B(n##5) B(n##6) B(n##7) B(n##8) B(n##9)
#define D(n) \
C(n##0) C(n##1) B(n##20) B(n##21) B(n##22)
      
int
foo (int x)
{
  {
lab:;
    int a = x;
    while (a < 60000)
      {
        int b = a;
        {
          int c = b;
          switch (c)
            {
              D(1)
              default: break;
            }
        }
        a += 10000;
        if (a == 4168)
          goto lab;
      }
  }
  return x;
}

int
main (void)
{
  foo (71);
  return 0;
}
