static int filelocal = 1;	/* In Data section */
static int filelocal_bss;	/* In BSS section */
#ifndef __STDC__
#define	const	/**/
#endif
static const int filelocal_ro = 201;	/* In Read-Only Data section */

extern void init1();
extern void foo();

int autovars (int bcd, int abc);
int localscopes (int x);
int useit (int val);
int useitp (const int *val);
void init0();
void marker1 ();
void marker2 ();
void marker3 ();
void marker4 ();

int main ()
{
  init0 ();
  foo ();
  autovars (5, 6);
  localscopes (0);

  return 0;
}

/* On some systems, such as AIX, unreferenced variables are deleted
   from the executable.  On other compilers, such as ARM RealView,
   const variables without their address taken are deleted.  */
void usestatics ()
{
  useitp (&filelocal);
  useitp (&filelocal_bss);
  useitp (&filelocal_ro);
}

void init0 ()
{
  filelocal_bss = 101;
  init1 ();
}

/* This is to derail optimizer in localscopes.
   Return 1 + 2 + . . . + N.  */
int
sum_upto (int n)
{
  int i;
  int retval = 0;

  for (i = 1; i <= n; ++i)
    retval += i;
  return retval;
}

int
useit (int val)
{
    static int usedval;

    usedval = val;
    return val + sum_upto (0);
}

int
useitp (const int *val)
{
    static int usedval;

    usedval = *val;
    return *val + sum_upto (0);
}

int
autovars (int bcd, int abc)
{
    int  i0 =  useit (0),  i1 =  useit (1),  i2 =  useit (2);
    int  i3 =  useit (3),  i4 =  useit (4),  i5 =  useit (5);
    int  i6 =  useit (6),  i7 =  useit (7),  i8 =  useit (8);
    int  i9 =  useit (9), i10 = useit (10), i11 = useit (11);
    int i12 = useit (12), i13 = useit (13), i14 = useit (14);
    int i15 = useit (15), i16 = useit (16), i17 = useit (17);
    int i18 = useit (18), i19 = useit (19), i20 = useit (20);
    int i21 = useit (21), i22 = useit (22), i23 = useit (23);
    int i24 = useit (24), i25 = useit (25), i26 = useit (26);
    int i27 = useit (27), i28 = useit (28), i29 = useit (29);
    int i30 = useit (30), i31 = useit (31), i32 = useit (32);
    int i33 = useit (33), i34 = useit (34), i35 = useit (35);
    int i36 = useit (36), i37 = useit (37), i38 = useit (38);
    int i39 = useit (39), i40 = useit (40), i41 = useit (41);
    int i42 = useit (42), i43 = useit (43), i44 = useit (44);
    int i45 = useit (45), i46 = useit (46), i47 = useit (47);
    int i48 = useit (48), i49 = useit (49), i50 = useit (50);
    int i51 = useit (51), i52 = useit (52), i53 = useit (53);
    int i54 = useit (54), i55 = useit (55), i56 = useit (56);
    int i57 = useit (57), i58 = useit (58), i59 = useit (59);
    int i60 = useit (60), i61 = useit (61), i62 = useit (62);
    int i63 = useit (63), i64 = useit (64), i65 = useit (65);
    int i66 = useit (66), i67 = useit (67), i68 = useit (68);
    int i69 = useit (69), i70 = useit (70), i71 = useit (71);
    int i72 = useit (72), i73 = useit (73), i74 = useit (74);
    int i75 = useit (75), i76 = useit (76), i77 = useit (77);
    int i78 = useit (78), i79 = useit (79), i80 = useit (80);
    int i81 = useit (81), i82 = useit (82), i83 = useit (83);
    int i84 = useit (84), i85 = useit (85), i86 = useit (86);
    int i87 = useit (87), i88 = useit (88), i89 = useit (89);
    int i90 = useit (90), i91 = useit (91), i92 = useit (92);
    int i93 = useit (93), i94 = useit (94), i95 = useit (95);
    int i96 = useit (96), i97 = useit (97), i98 = useit (98);
    int i99 = useit (99);

    /* Use all 100 of the local variables to derail aggressive optimizers.  */

    useit ( i0); useit ( i1); useit ( i2); useit ( i3); useit ( i4);
    useit ( i5); useit ( i6); useit ( i7); useit ( i8); useit ( i9);
    useit (i10); useit (i11); useit (i12); useit (i13); useit (i14);
    useit (i15); useit (i16); useit (i17); useit (i18); useit (i19);
    useit (i20); useit (i21); useit (i22); useit (i23); useit (i24);
    useit (i25); useit (i26); useit (i27); useit (i28); useit (i29);
    useit (i30); useit (i31); useit (i32); useit (i33); useit (i34);
    useit (i35); useit (i36); useit (i37); useit (i38); useit (i39);
    useit (i40); useit (i41); useit (i42); useit (i43); useit (i44);
    useit (i45); useit (i46); useit (i47); useit (i48); useit (i49);
    useit (i50); useit (i51); useit (i52); useit (i53); useit (i54);
    useit (i55); useit (i56); useit (i57); useit (i58); useit (i59);
    useit (i60); useit (i61); useit (i62); useit (i63); useit (i64);
    useit (i65); useit (i66); useit (i67); useit (i68); useit (i69);
    useit (i70); useit (i71); useit (i72); useit (i73); useit (i74);
    useit (i75); useit (i76); useit (i77); useit (i78); useit (i79);
    useit (i80); useit (i81); useit (i82); useit (i83); useit (i84);
    useit (i85); useit (i86); useit (i87); useit (i88); useit (i89);
    useit (i90); useit (i91); useit (i92); useit (i93); useit (i94);
    useit (i95); useit (i96); useit (i97); useit (i98); useit (i99);

    useit (abc); useit (bcd);

    marker1 ();
    return i0 + i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9 + i10
      + i11 + i12 + i13 + i14 + i15 + i16 + i17 + i18 + i19 + i20
      + i21 + i22 + i23 + i24 + i25 + i26 + i27 + i28 + i29 + i30
      + i31 + i32 + i33 + i34 + i35 + i36 + i37 + i38 + i39 + i40
      + i41 + i42 + i43 + i44 + i45 + i46 + i47 + i48 + i49 + i50
      + i51 + i52 + i53 + i54 + i55 + i56 + i57 + i58 + i59 + i60
      + i61 + i62 + i63 + i64 + i65 + i66 + i67 + i68 + i69 + i70
      + i71 + i72 + i73 + i74 + i75 + i76 + i77 + i78 + i79 + i80
      + i81 + i82 + i83 + i84 + i85 + i86 + i87 + i88 + i89 + i90
      + i91 + i92 + i93 + i94 + i95 + i96 + i97 + i98 + i99 + abc + bcd;
}

int
localscopes (int x)
{
    int localval;
    int retval;
    int i;

    localval = 0;
    useit (localval);

    {
	int localval = x + 4 + sum_upto (3); /* 10 */
	int localval1 = x + 5 + sum_upto (3); /* 11 */

	useit (localval);
	useit (localval1);
	marker2 ();
	{
	    int localval = localval1 + 3 + sum_upto (3); /* 20 */
	    int localval2 = localval1 + sum_upto (1); /* 12 */
	    useit (localval);
	    useit (localval2);
	    marker3 ();
	    {
		int localval = localval2 + 3 + sum_upto (5); /* 30 */
		int localval3 = localval2 + sum_upto (1); /* 13 */
		useit (localval);
		useit (localval3);
		marker4 ();
		retval = x + localval1 + localval2 + localval3;
	    }
	}
    }
    return retval;
}

void marker1 () {}
void marker2 () {}
void marker3 () {}
void marker4 () {}
