1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 void f();
3 void f(int);
4 void f(int, float);
5 void f(int, int);
6 void f(int, ...);
7 
8 typedef float Float;
9 void f(int, Float); // expected-note {{previous declaration is here}}
10 
11 int f(int, Float); // expected-error {{functions that differ only in their return type cannot be overloaded}}
12 
13 void g(void); // expected-note {{previous declaration is here}}
14 int g(); // expected-error {{functions that differ only in their return type cannot be overloaded}}
15 
16 typedef int INT;
17 
18 class X {
19   void f();
20   void f(int); // expected-note {{previous declaration is here}}
21   void f() const;
22 
23   void f(INT); // expected-error{{cannot be redeclared}}
24 
25   void g(int); // expected-note {{previous declaration is here}}
26   void g(int, float); // expected-note {{previous declaration is here}}
27   int g(int, Float); // expected-error {{functions that differ only in their return type cannot be overloaded}}
28 
29   static void g(float); // expected-note {{previous declaration is here}}
30   static void g(int); // expected-error {{static and non-static member functions with the same parameter types cannot be overloaded}}
31   static void g(float); // expected-error {{class member cannot be redeclared}}
32 
33   void h(); // expected-note {{previous declaration is here}}
34   void h() __restrict; // expected-error {{class member cannot be redeclared}}
35 };
36 
main()37 int main() {} // expected-note {{previous definition is here}}
main(int,char **)38 int main(int,char**) {} // expected-error {{conflicting types for 'main'}}
39