blob: 561f7fae6b90d8c39829b82ef65f51af1347220f [file] [log] [blame]
Daniel Dunbar8fbe78f2009-12-15 20:14:24 +00001// RUN: %clang_cc1 -fsyntax-only -verify %s
Douglas Gregorbcbf8632009-02-16 18:20:44 +00002
3// PR3588
4void g0(int, int);
Ted Kremenek99a337e2011-04-04 17:22:27 +00005void g0(); // expected-note{{previous declaration is here}} expected-note{{'g0' declared here}}
Douglas Gregorbcbf8632009-02-16 18:20:44 +00006
7void f0() {
8 g0(1, 2, 3); // expected-error{{too many arguments to function call}}
9}
10
11void g0(int); // expected-error{{conflicting types for 'g0'}}
12
13int g1(int, int);
14
15typedef int INT;
16
17INT g1(x, y)
18 int x;
19 int y;
20{
21 return x + y;
22}
23
24int g2(int, int); // expected-note{{previous declaration is here}}
25
26INT g2(x) // expected-error{{conflicting types for 'g2'}}
27 int x;
28{
29 return x;
30}
Douglas Gregore62c0a42009-02-24 01:23:02 +000031
32void test() {
33 int f1;
34 {
35 void f1(double);
36 {
37 void f1(double); // expected-note{{previous declaration is here}}
38 {
39 int f1(int); // expected-error{{conflicting types for 'f1'}}
40 }
41 }
42 }
43}
44
45extern void g3(int); // expected-note{{previous declaration is here}}
46static void g3(int x) { } // expected-error{{static declaration of 'g3' follows non-static declaration}}
47
48void test2() {
Douglas Gregoreddf4332009-02-24 20:03:32 +000049 extern int f2; // expected-note 2 {{previous definition is here}}
Douglas Gregore62c0a42009-02-24 01:23:02 +000050 {
51 void f2(int); // expected-error{{redefinition of 'f2' as different kind of symbol}}
52 }
53
54 {
55 int f2;
56 {
Douglas Gregoreddf4332009-02-24 20:03:32 +000057 void f2(int); // expected-error{{redefinition of 'f2' as different kind of symbol}}
Douglas Gregore62c0a42009-02-24 01:23:02 +000058 }
59 }
60}
Douglas Gregorde681d42009-02-24 04:26:15 +000061
62// <rdar://problem/6127293>
63int outer1(int); // expected-note{{previous declaration is here}}
64struct outer3 { };
John McCalla4da3232013-04-13 00:20:21 +000065int outer4(int); // expected-note{{previous declaration is here}}
Douglas Gregorde681d42009-02-24 04:26:15 +000066int outer5; // expected-note{{previous definition is here}}
67int *outer7(int);
68
69void outer_test() {
70 int outer1(float); // expected-error{{conflicting types for 'outer1'}}
71 int outer2(int); // expected-note{{previous declaration is here}}
72 int outer3(int); // expected-note{{previous declaration is here}}
John McCalla4da3232013-04-13 00:20:21 +000073 int outer4(int);
Douglas Gregorde681d42009-02-24 04:26:15 +000074 int outer5(int); // expected-error{{redefinition of 'outer5' as different kind of symbol}}
75 int* outer6(int); // expected-note{{previous declaration is here}}
76 int *outer7(int);
Douglas Gregor5a80bd12009-03-02 00:19:53 +000077 int outer8(int);
Douglas Gregorde681d42009-02-24 04:26:15 +000078
79 int *ip7 = outer7(6);
80}
81
82int outer2(float); // expected-error{{conflicting types for 'outer2'}}
83int outer3(float); // expected-error{{conflicting types for 'outer3'}}
84int outer4(float); // expected-error{{conflicting types for 'outer4'}}
85
86void outer_test2(int x) {
87 int* ip = outer6(x); // expected-warning{{use of out-of-scope declaration of 'outer6'}}
88 int *ip2 = outer7(x);
89}
Douglas Gregor5a80bd12009-03-02 00:19:53 +000090
91void outer_test3() {
92 int *(*fp)(int) = outer8; // expected-error{{use of undeclared identifier 'outer8'}}
93}
94
Douglas Gregora74a2972009-03-06 22:43:54 +000095enum e { e1, e2 };
96
97// GNU extension: prototypes and K&R function definitions
98int isroot(short x, // expected-note{{previous declaration is here}}
99 enum e);
100
101int isroot(x, y)
102 short x; // expected-warning{{promoted type 'int' of K&R function parameter is not compatible with the parameter type 'short' declared in a previous prototype}}
103 unsigned int y;
104{
105 return x == 1;
106}
Douglas Gregor3729f242009-03-19 18:14:46 +0000107
108// PR3817
109void *h0(unsigned a0, ...);
110extern __typeof (h0) h1 __attribute__((__sentinel__));
111extern __typeof (h1) h1 __attribute__((__sentinel__));
112
113// PR3840
114void i0 (unsigned short a0);
115extern __typeof (i0) i1;
116extern __typeof (i1) i1;
Douglas Gregord6b05f72009-03-23 16:26:51 +0000117
118typedef int a();
119typedef int a2(int*);
120a x;
Douglas Gregorc8be9522010-05-04 18:18:31 +0000121a2 x2; // expected-note{{passing argument to parameter here}}
Douglas Gregord6b05f72009-03-23 16:26:51 +0000122void test_x() {
123 x(5);
Douglas Gregorc68e1402010-04-09 00:35:39 +0000124 x2(5); // expected-warning{{incompatible integer to pointer conversion passing 'int' to parameter of type 'int *'}}
Douglas Gregord6b05f72009-03-23 16:26:51 +0000125}
Douglas Gregor2973d402010-02-03 19:27:29 +0000126
Fariborz Jahanian6e814922010-05-28 22:23:22 +0000127enum e0 {one};
Douglas Gregor2973d402010-02-03 19:27:29 +0000128void f3();
129void f3(enum e0 x) {}
Eli Friedman448ce402012-08-30 00:44:15 +0000130
131enum incomplete_enum;
132void f4(); // expected-note {{previous declaration is here}}
133void f4(enum incomplete_enum); // expected-error {{conflicting types for 'f4'}}