1// RUN: %clang_cc1 -emit-llvm-only -g %s
2template<typename T> struct Identity {
3  typedef T Type;
4};
5
6void f(Identity<int>::Type a) {}
7void f(Identity<int> a) {}
8void f(int& a) { }
9
10template<typename T> struct A {
11  A<T> *next;
12};
13void f(A<int>) { }
14
15struct B { };
16
17void f() {
18  int B::*a = 0;
19  void (B::*b)() = 0;
20}
21
22namespace EmptyNameCrash {
23  struct A { A(); };
24  typedef struct { A x; } B;
25  B x;
26}
27
28// PR4890
29namespace PR4890 {
30  struct X {
31    ~X();
32  };
33
34  X::~X() { }
35}
36
37namespace VirtualDtor {
38  struct Y {
39    virtual ~Y();
40  };
41
42  Y::~Y() { }
43}
44
45namespace VirtualBase {
46  struct A { };
47  struct B : virtual A { };
48
49  void f() {
50    B b;
51  }
52}
53
54void foo() {
55  const wchar_t c = L'x';
56  wchar_t d = c;
57}
58
59namespace b5249287 {
60template <typename T> class A {
61  struct B;
62};
63
64class Cls {
65  template <typename T> friend class A<T>::B;
66};
67
68Cls obj;
69}
70