1 // RUN: %clang_cc1 -pedantic -Wunused-label -Wno-deprecated-non-prototype -verify -x c %s
3 // RUN: not %clang_cc1 -pedantic -Wunused-label -fixit -x c %t
4 // RUN: %clang_cc1 -pedantic -Wunused-label -Wno-deprecated-non-prototype -Werror -x c %t
5 // RUN: grep -v CHECK %t | FileCheck %t
7 /* This is a test of the various code modification hints that are
8 provided as part of warning or extension diagnostics. All of the
9 warnings will be fixed by -fixit, and the resulting file should
10 compile cleanly with -Werror -pedantic. */
12 // FIXME: FIX-IT should add #include <string.h>?
13 int strcmp(const char *s1
, const char *s2
);
15 void f0(void) { }; // expected-warning {{';'}}
18 int x
, y
;; // expected-warning {{extra ';'}}
21 // CHECK: _Complex double cd;
22 _Complex cd
; // expected-warning {{assuming '_Complex double'}}
24 // CHECK: struct s s0 = { .y = 5 };
25 struct s s0
= { y
: 5 }; // expected-warning {{GNU old-style}}
27 // CHECK: int array0[5] = { [3] = 3 };
28 int array0
[5] = { [3] 3 }; // expected-warning {{GNU 'missing ='}}
32 void f1(x
, y
) // expected-error 2{{was not declared, defaults to 'int'; ISO C99 and later do not support implicit int}}
41 int test_cond(int y
, int fooBar
) { // expected-note {{here}}
42 // CHECK: int x = y ? 1 : 4+fooBar;
43 int x
= y
? 1 4+foobar
; // expected-error {{expected ':'}} expected-error {{undeclared identifier}} expected-note {{to match}}
44 // CHECK: x = y ? ONE : TWO;
45 x
= y
? ONE TWO
; // expected-error {{':'}} expected-note {{to match}}
49 // CHECK: const typedef int int_t;
50 const typedef typedef int int_t
; // expected-warning {{duplicate 'typedef'}}
52 // <rdar://problem/7159693>
54 Red
// expected-error{{missing ',' between enumerators}}
55 Green
= 17 // expected-error{{missing ',' between enumerators}}
61 // CHECK: struct test_struct *struct_ptr;
62 test_struct
*struct_ptr
; // expected-error {{must use 'struct' tag to refer to type 'test_struct'}}
65 void removeUnusedLabels(char c
) {
66 L0
/*removed comment*/: c
++; // expected-warning {{unused label}}
67 removeUnusedLabels(c
);
68 L1
: // expected-warning {{unused label}}
70 /*preserved comment*/ L2
: c
++; // expected-warning {{unused label}}
71 LL
// expected-warning {{unused label}}
73 c
= c
+ 3; L4
: return; // expected-warning {{unused label}}
76 int oopsAComma
= 0, // expected-error {{';'}}
77 void oopsMoreCommas(void) {
78 static int a
[] = { 0, 1, 2 }, // expected-error {{';'}}
79 static int b
[] = { 3, 4, 5 }, // expected-error {{';'}}
80 &a
== &b
? oopsMoreCommas() : removeUnusedLabels(a
[0]);
83 int commaAtEndOfStatement(void) {
85 a
= 5, // expected-error {{';'}}
86 int m
= 5, // expected-error {{';'}}
87 return 0, // expected-error {{';'}}
90 int noSemiAfterLabel(int n
) {
97 // CHECK: /*FOO*/ case 3: ;
98 /*FOO*/ case 3: // expected-error {{expected statement}}
104 // CHECK: /*BAR*/ default: ;
105 /*BAR*/ default: // expected-error {{expected statement}}
110 struct noSemiAfterStruct
// expected-error {{expected ';' after struct}}
111 struct noSemiAfterStruct
{
112 int n
// expected-warning {{';'}}
113 } // expected-error {{expected ';' after struct}}
114 enum noSemiAfterEnum
{
116 } // expected-error {{expected ';' after enum}}
118 int PR17175
__attribute__((visibility(hidden
))); // expected-error {{'visibility' attribute requires a string}}