[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / FixIt / fixit.c
blob0e86d454a0e10946ffab953c2f68884ceac594ec
1 // RUN: %clang_cc1 -pedantic -Wunused-label -Wno-deprecated-non-prototype -verify -x c %s
2 // RUN: cp %s %t
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 {{';'}}
17 struct s {
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 ='}}
30 // CHECK: int x
31 // CHECK: int y
32 void f1(x, y) // expected-error 2{{was not declared, defaults to 'int'; ISO C99 and later do not support implicit int}}
36 int i0 = { 17 };
38 #define ONE 1
39 #define TWO 2
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}}
46 return x;
49 // CHECK: const typedef int int_t;
50 const typedef typedef int int_t; // expected-warning {{duplicate 'typedef'}}
52 enum Color {
53 Red // expected-error{{missing ',' between enumerators}}
54 Green = 17 // expected-error{{missing ',' between enumerators}}
55 Blue,
58 struct test_struct {
59 // CHECK: struct test_struct *struct_ptr;
60 test_struct *struct_ptr; // expected-error {{must use 'struct' tag to refer to type 'test_struct'}}
63 void removeUnusedLabels(char c) {
64 L0 /*removed comment*/: c++; // expected-warning {{unused label}}
65 removeUnusedLabels(c);
66 L1: // expected-warning {{unused label}}
67 c++;
68 /*preserved comment*/ L2 : c++; // expected-warning {{unused label}}
69 LL // expected-warning {{unused label}}
70 : c++;
71 c = c + 3; L4: return; // expected-warning {{unused label}}
74 int oopsAComma = 0, // expected-error {{';'}}
75 void oopsMoreCommas(void) {
76 static int a[] = { 0, 1, 2 }, // expected-error {{';'}}
77 static int b[] = { 3, 4, 5 }, // expected-error {{';'}}
78 &a == &b ? oopsMoreCommas() : removeUnusedLabels(a[0]);
81 int commaAtEndOfStatement(void) {
82 int a = 1;
83 a = 5, // expected-error {{';'}}
84 int m = 5, // expected-error {{';'}}
85 return 0, // expected-error {{';'}}
88 struct noSemiAfterStruct // expected-error {{expected ';' after struct}}
89 struct noSemiAfterStruct {
90 int n // expected-warning {{';'}}
91 } // expected-error {{expected ';' after struct}}
92 enum noSemiAfterEnum {
94 } // expected-error {{expected ';' after enum}}
96 int PR17175 __attribute__((visibility(hidden))); // expected-error {{'visibility' attribute requires a string}}