// Testcase for mangling of unnamed types.

// namespace-scope unnamed types have no linkage, so we only test that they
// are distinct.

// { dg-do compile { target c++11 } }

typedef struct { } *A;
typedef struct { } *B;

void f(A) { }
void f(B) { }

struct C
{
  typedef struct { }* D;
  typedef enum { e }* E;
};

// { dg-final { scan-assembler "_Z2g1PN1CUt_E" } }
void g1(C::D) { }
// { dg-final { scan-assembler "_Z2g2PN1CUt0_E" } }
void g2(C::E) { }

template <class T>
void h1(T t) { }

template <class T>
void h2(T t) { }

inline void j()
{
  typedef enum { f }* F;
// { dg-final { scan-assembler "_Z2h1IPZ1jvEUt_EvT_" } }
  h1(F());
  typedef struct { }* G;
// { dg-final { scan-assembler "_Z2h2IPZ1jvEUt0_EvT_" } }
  h2(G());
}

int main()
{
  j();
}
