Clang Project

clang_source_code/test/FixIt/fixit.c
1// RUN: %clang_cc1 -pedantic -Wunused-label -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 -Werror -x c %t
5// RUN: grep -v CHECK %t | FileCheck %t
6
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. */
11
12// FIXME: FIX-IT should add #include <string.h>?
13int strcmp(const char *s1, const char *s2);
14
15void f0(void) { }; // expected-warning {{';'}}
16
17struct s {
18  int x, y;; // expected-warning {{extra ';'}}
19};
20
21// CHECK: _Complex double cd;
22_Complex cd; // expected-warning {{assuming '_Complex double'}}
23
24// CHECK: struct s s0 = { .y = 5 };
25struct s s0 = { y: 5 }; // expected-warning {{GNU old-style}}
26
27// CHECK: int array0[5] = { [3] = 3 };
28int array0[5] = { [3] 3 }; // expected-warning {{GNU 'missing ='}}
29
30// CHECK: int x
31// CHECK: int y
32void f1(x, y) // expected-warning 2{{defaulting to type 'int'}}
33{
34}
35
36int i0 = { 17 };
37
38#define ONE 1
39#define TWO 2
40
41int 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;
47}
48
49// CHECK: const typedef int int_t;
50const typedef typedef int int_t; // expected-warning {{duplicate 'typedef'}}
51
52// <rdar://problem/7159693>
53enum Color { 
54  Red // expected-error{{missing ',' between enumerators}}
55  Green = 17 // expected-error{{missing ',' between enumerators}}
56  Blue,
57};
58
59// rdar://9295072
60struct test_struct {
61  // CHECK: struct test_struct *struct_ptr;
62  test_struct *struct_ptr; // expected-error {{must use 'struct' tag to refer to type 'test_struct'}}
63};
64
65void removeUnusedLabels(char c) {
66  L0 /*removed comment*/:        c++; // expected-warning {{unused label}}
67  removeUnusedLabels(c);
68  L1: // expected-warning {{unused label}}
69  c++;
70  /*preserved comment*/ L2  :        c++; // expected-warning {{unused label}}
71  LL // expected-warning {{unused label}}
72  : c++;
73  c = c + 3; L4: return; // expected-warning {{unused label}}
74}
75
76int oopsAComma = 0, // expected-error {{';'}}
77void oopsMoreCommas() {
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]);
81}
82
83int commaAtEndOfStatement() {
84  int a = 1;
85  a = 5, // expected-error {{';'}}
86  int m = 5, // expected-error {{';'}}
87  return 0, // expected-error {{';'}}
88}
89
90int noSemiAfterLabel(int n) {
91  switch (n) {
92    default:
93      return n % 4;
94    case 0:
95    case 1:
96    case 2:
97    // CHECK: /*FOO*/ case 3: ;
98    /*FOO*/ case 3: // expected-error {{expected statement}}
99  }
100  switch (n) {
101    case 1:
102    case 2:
103      return 0;
104    // CHECK: /*BAR*/ default: ;
105    /*BAR*/ default: // expected-error {{expected statement}}
106  }
107  return 1;
108}
109
110struct noSemiAfterStruct // expected-error {{expected ';' after struct}}
111struct noSemiAfterStruct {
112  int n // expected-warning {{';'}}
113} // expected-error {{expected ';' after struct}}
114enum noSemiAfterEnum {
115  e1
116} // expected-error {{expected ';' after enum}}
117
118int PR17175 __attribute__((visibility(hidden))); // expected-error {{'visibility' attribute requires a string}}
119