From 222e2a7620e6520ffaf4fc4e69d79c18da31542e Mon Sep 17 00:00:00 2001 From: "Zancanaro; Carlo" Date: Mon, 24 Sep 2012 09:58:17 +1000 Subject: Add the clang library to the repo (with some of my changes, too). --- clang/test/FixIt/fixit.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 clang/test/FixIt/fixit.c (limited to 'clang/test/FixIt/fixit.c') diff --git a/clang/test/FixIt/fixit.c b/clang/test/FixIt/fixit.c new file mode 100644 index 0000000..5e4947b --- /dev/null +++ b/clang/test/FixIt/fixit.c @@ -0,0 +1,102 @@ +// RUN: %clang_cc1 -pedantic -Wunused-label -verify -x c %s +// RUN: cp %s %t +// RUN: not %clang_cc1 -pedantic -Wunused-label -fixit -x c %t +// RUN: grep -v CHECK %t > %t2 +// RUN: %clang_cc1 -pedantic -Wunused-label -Werror -x c %t +// RUN: FileCheck -input-file=%t2 %t + +/* This is a test of the various code modification hints that are + provided as part of warning or extension diagnostics. All of the + warnings will be fixed by -fixit, and the resulting file should + compile cleanly with -Werror -pedantic. */ + +// FIXME: FIX-IT should add #include ? +int strcmp(const char *s1, const char *s2); + +void f0(void) { }; // expected-warning {{';'}} + +struct s { + int x, y;; // expected-warning {{extra ';'}} +}; + +// CHECK: _Complex double cd; +_Complex cd; // expected-warning {{assuming '_Complex double'}} + +// CHECK: struct s s0 = { .y = 5 }; +struct s s0 = { y: 5 }; // expected-warning {{GNU old-style}} + +// CHECK: int array0[5] = { [3] = 3 }; +int array0[5] = { [3] 3 }; // expected-warning {{GNU 'missing ='}} + +// CHECK: int x +// CHECK: int y +void f1(x, y) // expected-warning 2{{defaulting to type 'int'}} +{ +} + +int i0 = { 17 }; + +#define ONE 1 +#define TWO 2 + +int test_cond(int y, int fooBar) { // expected-note {{here}} +// CHECK: int x = y ? 1 : 4+fooBar; + int x = y ? 1 4+foobar; // expected-error {{expected ':'}} expected-error {{undeclared identifier}} expected-note {{to match}} +// CHECK: x = y ? ONE : TWO; + x = y ? ONE TWO; // expected-error {{':'}} expected-note {{to match}} + return x; +} + +// CHECK: const typedef int int_t; +const typedef typedef int int_t; // expected-warning {{duplicate 'typedef'}} + +// +enum Color { + Red // expected-error{{missing ',' between enumerators}} + Green = 17 // expected-error{{missing ',' between enumerators}} + Blue, +}; + +// rdar://9295072 +struct test_struct { + // CHECK: struct test_struct *struct_ptr; + test_struct *struct_ptr; // expected-error {{must use 'struct' tag to refer to type 'test_struct'}} +}; + +void removeUnusedLabels(char c) { + L0 /*removed comment*/: c++; // expected-warning {{unused label}} + removeUnusedLabels(c); + L1: // expected-warning {{unused label}} + c++; + /*preserved comment*/ L2 : c++; // expected-warning {{unused label}} + LL // expected-warning {{unused label}} + : c++; + c = c + 3; L4: return; // expected-warning {{unused label}} +} + +int oopsAComma = 0, // expected-error {{';'}} +void oopsMoreCommas() { + static int a[] = { 0, 1, 2 }, // expected-error {{';'}} + static int b[] = { 3, 4, 5 }, // expected-error {{';'}} + &a == &b ? oopsMoreCommas() : removeUnusedLabels(a[0]); +} + +int noSemiAfterLabel(int n) { + switch (n) { + default: + return n % 4; + case 0: + case 1: + case 2: + // CHECK: /*FOO*/ case 3: ; + /*FOO*/ case 3: // expected-error {{expected statement}} + } + switch (n) { + case 1: + case 2: + return 0; + // CHECK: /*BAR*/ default: ; + /*BAR*/ default: // expected-error {{expected statement}} + } + return 1; +} -- cgit v1.2.3