qualified-id-lookup.cpp revision 83cf05a3b0e655dc8ea1cb4c4e1eef541b770992
144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor// RUN: clang -fsyntax-only -verify %s
244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns {
444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  int f(); // expected-note{{previous declaration is here}}
544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns {
744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  double f(); // expected-error{{functions that differ only in their return type cannot be overloaded}}
844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
1044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns2 {
1144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  float f();
1244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
1344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
1444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns2 {
1544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  float f(int); // expected-note{{previous declaration is here}}
1644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
1744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
1844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns2 {
1944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  double f(int); // expected-error{{functions that differ only in their return type cannot be overloaded}}
2044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
2144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
2244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace N {
2344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  int& f1();
2444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
2544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
2644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace N {
2744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  struct f1 {
2844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor    static int member;
2944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  };
3044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
3144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  void test_f1() {
3244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor    int &i1 = f1();
3344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  }
3444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
3544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
3644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace N {
3744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  float& f1(int);
3844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
3944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  struct f2 {
4044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor    static int member;
4144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  };
4244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  void f2();
4344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
4444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
4544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregorint i1 = N::f1::member;
4644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregortypedef struct N::f1 type1;
4744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregorint i2 = N::f2::member;
4844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregortypedef struct N::f2 type2;
4944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
5044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregorvoid test_f1(int i) {
5144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  int &v1 = N::f1();
5244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  float &v2 = N::f1(i);
53a67865c64e2185817703b602ec24163b286abaabChris Lattner  int v3 = ::i1;
5444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
55a67865c64e2185817703b602ec24163b286abaabChris Lattner
5683cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattnertypedef int f2_type;
5783cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattnernamespace a {
5883cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner  typedef int f2_type(int, int);
5983cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner
6083cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner  void test_f2() {
6183cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner    ::f2_type(1, 2); // expected-error {{function-style cast to a builtin type can only take one argument}}
6283cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner  }
6383cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner}
6483cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner
6583cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner
6683cf05a3b0e655dc8ea1cb4c4e1eef541b770992Chris Lattner
67