// RUN: %clang_cc1 %s -emit-llvm -cxx-abi itanium -o - | FileCheck %s

// CHECK:  @_ZZ4FUNCvEN4SSSSC1ERKf
// CHECK: @_ZZ4FUNCvEN4SSSSC2E_0RKf
// CHECK:  @_ZZ4GORFfEN4SSSSC1ERKf
// CHECK: @_ZZ4GORFfEN4SSSSC2E_0RKf

void FUNC ()
{
  {
    float IVAR1 ;

    struct SSSS 
    {
      float bv;
      SSSS( const float& from): bv(from) { }
    };

    SSSS VAR1(IVAR1);
   }

   {
    float IVAR2 ;

    struct SSSS
    {
     SSSS( const float& from) {}
    };

    SSSS VAR2(IVAR2);
   }
}

void GORF (float IVAR1)
{
  {
    struct SSSS 
    {
      float bv;
      SSSS( const float& from): bv(from) { }
    };

    SSSS VAR1(IVAR1);
   }

   {
    float IVAR2 ;

    struct SSSS
    {
     SSSS( const float& from) {}
    };

    SSSS VAR2(IVAR2);
   }
}

// CHECK: @_ZZ12OmittingCodefEN4SSSSC1E_0RKf
inline void OmittingCode(float x) {
  if (0) {
    struct SSSS {
      float bv;
      SSSS(const float& from): bv(from) { }
    };

    SSSS VAR1(x);
  }

  struct SSSS {
    float bv;
    SSSS(const float& from): bv(from) { }
  };

  SSSS VAR2(x);
}
void CallOmittingCode() { OmittingCode(1); }

// CHECK: @_ZZ15LocalAnonStructvENUt0_1gEv
inline void LocalAnonStruct() {
  if (0) {
    struct { void f() {} } x;
    x.f();
  }
  struct { void g() {} } y;
  y.g();
}
void CallLocalAnonStruct() { LocalAnonStruct(); }
