blob: 561f7fae6b90d8c39829b82ef65f51af1347220f [file] [log] [blame]
Daniel Dunbara5728872009-12-15 20:14:24 +00001// RUN: %clang_cc1 -fsyntax-only -verify %s
Douglas Gregor68719812009-02-16 18:20:44 +00002
3// PR3588
4void g0(int, int);
Ted Kremenek5862f0e2011-04-04 17:22:27 +00005void g0(); // expected-note{{previous declaration is here}} expected-note{{'g0' declared here}}
Douglas Gregor68719812009-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 Gregor04495c82009-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 Gregord6f7e9d2009-02-24 20:03:32 +000049 extern int f2; // expected-note 2 {{previous definition is here}}
Douglas Gregor04495c82009-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 Gregord6f7e9d2009-02-24 20:03:32 +000057 void f2(int); // expected-error{{redefinition of 'f2' as different kind of symbol}}
Douglas Gregor04495c82009-02-24 01:23:02 +000058 }
59 }
60}
Douglas Gregor25d944a2009-02-24 04:26:15 +000061
62// <rdar://problem/6127293>
63int outer1(int); // expected-note{{previous declaration is here}}
64struct outer3 { };
John McCall927b0af2013-04-13 00:20:21 +000065int outer4(int); // expected-note{{previous declaration is here}}
Douglas Gregor25d944a2009-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 McCall927b0af2013-04-13 00:20:21 +000073 int outer4(int);
Douglas Gregor25d944a2009-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 Gregor63935192009-03-02 00:19:53 +000077 int outer8(int);
Douglas Gregor25d944a2009-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 Gregor63935192009-03-02 00:19:53 +000090
91void outer_test3() {
92 int *(*fp)(int) = outer8; // expected-error{{use of undeclared identifier 'outer8'}}
93}
94
Douglas Gregorc8376562009-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 Gregor13d7a322009-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 Gregord1659a62009-03-23 16:26:51 +0000117
118typedef int a();
119typedef int a2(int*);
120a x;
Douglas Gregor5f970ee2010-05-04 18:18:31 +0000121a2 x2; // expected-note{{passing argument to parameter here}}
Douglas Gregord1659a62009-03-23 16:26:51 +0000122void test_x() {
123 x(5);
Douglas Gregord4eea832010-04-09 00:35:39 +0000124 x2(5); // expected-warning{{incompatible integer to pointer conversion passing 'int' to parameter of type 'int *'}}
Douglas Gregord1659a62009-03-23 16:26:51 +0000125}
Douglas Gregorb0f8eac2010-02-03 19:27:29 +0000126
Fariborz Jahanian05115522010-05-28 22:23:22 +0000127enum e0 {one};
Douglas Gregorb0f8eac2010-02-03 19:27:29 +0000128void f3();
129void f3(enum e0 x) {}
Eli Friedmanc586d5d2012-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'}}