/* Radar 5636185  */
/* { dg-do compile { target *-*-darwin* } } */
/* { dg-options "-O0 -gdwarf-2 -dA -c -Wno-deprecated-declarations" } */
/* { dg-final { scan-assembler "DW_AT_MIPS_linkage_name" } } */
/* { dg-final { scan-assembler "_Z7marker1v" } } */
/* { dg-final { scan-assembler "_Z7marker2v" } } */
/* { dg-final { scan-assembler "_Z6foobari" } } */
/* { dg-final { scan-assembler-not "_ZZ4mainEN10InnerLocal16NestedInnerLocal7nil_fooEi" } } */
/* { dg-final { scan-assembler-not "_ZZ4mainEN10InnerLocal6il_fooERKh" } } */

void marker1 (void)
{ 
}

void marker2 (void)
{
}
  
int foobar (int x)
{
  class Local {
  public:
    int loc1;
    char loc_foo (char c)
    {
      return c + 3;
    }
  };

  Local l;
  static Local l1;
  char  c;

  marker1 ();

  l.loc1 = 23;

  c = l.loc_foo('x');
  return c + 2;
}

int main()
{
  int c;
  
  c = foobar (31);
  
 { // inner block
   class InnerLocal {
   public:
     char ilc;
     int * ip;
     int il_foo (unsigned const char & uccr)
     {
       return uccr + 333;
     }
     class NestedInnerLocal {
     public:
       int nil;
       int nil_foo (int i)
       {
         return i * 27;
       }
     };
     NestedInnerLocal nest1;
   };

   InnerLocal il;

   il.ilc = 'b';
   il.ip = &c;
   marker2();
 }
}
