qualified-id-lookup.cpp revision 074149e11baf5f7db12f84efd5c34ba6e35d5cdf
144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor// RUN: clang -fsyntax-only -verify %s
244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns {
444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  int f(); // expected-note{{previous declaration is here}}
5074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor
6074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor  enum E {
7074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor    Enumerator
8074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor  };
944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
1044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns {
1144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  double f(); // expected-error{{functions that differ only in their return type cannot be overloaded}}
12074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor
13074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor  int x = Enumerator;
1444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
1544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
1644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns2 {
1744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  float f();
1844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
1944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
20074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregorint y = Ns::Enumerator;
21074149e11baf5f7db12f84efd5c34ba6e35d5cdfDouglas Gregor
2244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns2 {
2344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  float f(int); // expected-note{{previous declaration is here}}
2444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
2544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
2644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns2 {
2744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  double f(int); // expected-error{{functions that differ only in their return type cannot be overloaded}}
2844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
2944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
3044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace N {
3144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  int& f1();
3244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
3344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
3444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace N {
3544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  struct f1 {
3644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor    static int member;
3744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  };
3844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
3944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  void test_f1() {
4044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor    int &i1 = f1();
4144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  }
4244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
4344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
4444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace N {
4544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  float& f1(int);
4644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
4744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  struct f2 {
4844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor    static int member;
4944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  };
5044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  void f2();
5144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
5244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
5344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregorint i1 = N::f1::member;
5444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregortypedef struct N::f1 type1;
5544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregorint i2 = N::f2::member;
5644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregortypedef struct N::f2 type2;
5744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
5844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregorvoid test_f1(int i) {
5944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  int &v1 = N::f1();
6044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  float &v2 = N::f1(i);
61a67865c64e2185817703b602ec24163b286abaabChris Lattner  int v3 = ::i1;
6244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
63a67865c64e2185817703b602ec24163b286abaabChris Lattner
6483cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattnertypedef int f2_type;
6583cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattnernamespace a {
6683cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner  typedef int f2_type(int, int);
6783cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner
6883cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner  void test_f2() {
6983cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner    ::f2_type(1, 2); // expected-error {{function-style cast to a builtin type can only take one argument}}
7083cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner  }
7183cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner}
7283cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner
7383cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner
7483cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner
75