diff options
Diffstat (limited to 'test/FixIt')
-rw-r--r-- | test/FixIt/atomic-property.m | 29 | ||||
-rw-r--r-- | test/FixIt/fixit-cxx0x.cpp | 108 | ||||
-rw-r--r-- | test/FixIt/fixit-cxx11-compat.cpp | 11 | ||||
-rw-r--r-- | test/FixIt/fixit-missing-method-return-type.m | 8 | ||||
-rw-r--r-- | test/FixIt/fixit-recompile.c | 6 | ||||
-rw-r--r-- | test/FixIt/fixit-recursive-block.c | 12 | ||||
-rw-r--r-- | test/FixIt/fixit-vexing-parse-cxx0x.cpp | 21 | ||||
-rw-r--r-- | test/FixIt/fixit-vexing-parse.cpp | 89 | ||||
-rw-r--r-- | test/FixIt/fixit.c | 62 | ||||
-rw-r--r-- | test/FixIt/fixit.cpp | 118 | ||||
-rw-r--r-- | test/FixIt/no-fixit.cpp | 7 | ||||
-rw-r--r-- | test/FixIt/objc-literals.m | 44 | ||||
-rw-r--r-- | test/FixIt/typo-crash.cpp | 17 | ||||
-rw-r--r-- | test/FixIt/typo.c | 2 | ||||
-rw-r--r-- | test/FixIt/typo.m | 6 |
15 files changed, 479 insertions, 61 deletions
diff --git a/test/FixIt/atomic-property.m b/test/FixIt/atomic-property.m new file mode 100644 index 0000000000000..9ede7f1e76b46 --- /dev/null +++ b/test/FixIt/atomic-property.m @@ -0,0 +1,29 @@ +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fdiagnostics-parseable-fixits -x objective-c -fobjc-arc %s 2>&1 | FileCheck %s + +@interface I +@property id prop; +@property (atomic) id atomic_prop; +- (id) prop; +- (id) atomic_prop; + +@property ( ) id prop1; + +@property (copy, atomic, readwrite) id atomic_prop1; + +@property (copy, readwrite) id prop2; +@end + +@implementation I +@synthesize prop, prop1, prop2; +@synthesize atomic_prop, atomic_prop1; +- (id) prop { return 0; } +- (id) prop1 { return 0; } +- (id) prop2 { return 0; } +- (id) atomic_prop { return 0; } +- (id) atomic_prop1 { return 0; } +@end + +// CHECK: {4:1-4:10}:"@property (nonatomic) " +// CHECK: {9:1-9:12}:"@property (nonatomic" +// CHECK: {13:1-13:12}:"@property (nonatomic, " + diff --git a/test/FixIt/fixit-cxx0x.cpp b/test/FixIt/fixit-cxx0x.cpp index 73316457b18f9..b6cc2c08b0312 100644 --- a/test/FixIt/fixit-cxx0x.cpp +++ b/test/FixIt/fixit-cxx0x.cpp @@ -18,37 +18,93 @@ using ::T = void; // expected-error {{name defined in alias declaration must be using typename U = void; // expected-error {{name defined in alias declaration must be an identifier}} using typename ::V = void; // expected-error {{name defined in alias declaration must be an identifier}} -namespace Constexpr { - extern constexpr int a; // expected-error {{must be a definition}} - // -> extern const int a; +namespace SemiCommaTypo { + int m {}, + n [[]], // expected-error {{expected ';' at end of declaration}} + int o; - extern constexpr int *b; // expected-error {{must be a definition}} - // -> extern int *const b; - - extern constexpr int &c; // expected-error {{must be a definition}} - // -> extern int &b; - - extern constexpr const int d; // expected-error {{must be a definition}} - // -> extern const int d; + struct Base { + virtual void f2(), f3(); + }; + struct MemberDeclarator : Base { + int k : 4, + //[[]] : 1, FIXME: test this once we support attributes here + : 9, // expected-error {{expected ';' at end of declaration}} + char c, // expected-error {{expected ';' at end of declaration}} + typedef void F(), // expected-error {{expected ';' at end of declaration}} + F f1, + f2 final, + f3 override, // expected-error {{expected ';' at end of declaration}} + }; +} - int z; - constexpr int a = 0; - constexpr int *b = &z; - constexpr int &c = z; - constexpr int d = a; +namespace ScopedEnum { + enum class E { a }; - // FIXME: Provide FixIts for static data members too. -#if 0 + enum class E b = E::a; // expected-error {{must use 'enum' not 'enum class'}} struct S { - static constexpr int b; // xpected-error {{requires an initializer}} - // -> const int b; + friend enum class E; // expected-error {{must use 'enum' not 'enum class'}} }; +} - constexpr int S::b = 0; -#endif +struct S2 { + void f(int i); + void g(int i); +}; - struct S { - static char *const p = 0; // expected-error {{requires 'constexpr' specifier}} - // -> constexpr static char *const p = 0; - }; +void S2::f(int i) { + (void)[&, &i, &i]{}; // expected-error 2{{'&' cannot precede a capture when the capture default is '&'}} + (void)[=, this]{ this->g(5); }; // expected-error{{'this' cannot be explicitly captured}} + (void)[i, i]{ }; // expected-error{{'i' can appear only once in a capture list}} + (void)[&, i, i]{ }; // expected-error{{'i' can appear only once in a capture list}} + (void)[] mutable { }; // expected-error{{lambda requires '()' before 'mutable'}} + (void)[] -> int { }; // expected-error{{lambda requires '()' before return type}} } + +#define bar "bar" +const char *p = "foo"bar; // expected-error {{requires a space between}} +#define ord - '0' +int k = '4'ord; // expected-error {{requires a space between}} + +void operator""_x(char); // expected-error {{requires a space}} +void operator"x" _y(char); // expected-error {{must be '""'}} +void operator L"" _z(char); // expected-error {{encoding prefix}} +void operator "x" "y" U"z" ""_whoops "z" "y"(char); // expected-error {{must be '""'}} + +void f() { + 'a'_x; + 'b'_y; + 'c'_z; + 'd'_whoops; +} + +template<typename ...Ts> struct MisplacedEllipsis { + int a(Ts ...(x)); // expected-error {{'...' must immediately precede declared identifier}} + int b(Ts ...&x); // expected-error {{'...' must immediately precede declared identifier}} + int c(Ts ...&); // expected-error {{'...' must be innermost component of anonymous pack declaration}} + int d(Ts ...(...&...)); // expected-error 2{{'...' must be innermost component of anonymous pack declaration}} + int e(Ts ...*[]); // expected-error {{'...' must be innermost component of anonymous pack declaration}} + int f(Ts ...(...*)()); // expected-error 2{{'...' must be innermost component of anonymous pack declaration}} + int g(Ts ...()); // ok +}; +namespace TestMisplacedEllipsisRecovery { + MisplacedEllipsis<int, char> me; + int i; char k; + int *ip; char *kp; + int ifn(); char kfn(); + int a = me.a(i, k); + int b = me.b(i, k); + int c = me.c(i, k); + int d = me.d(i, k); + int e = me.e(&ip, &kp); + int f = me.f(ifn, kfn); + int g = me.g(ifn, kfn); +} + +template<template<typename> ...Foo, // expected-error {{template template parameter requires 'class' after the parameter list}} + template<template<template<typename>>>> // expected-error 3 {{template template parameter requires 'class' after the parameter list}} +void func(); + +template<int *ip> struct IP { }; // expected-note{{declared here}} +IP<0> ip0; // expected-error{{null non-type template argument must be cast to template parameter type 'int *'}} + diff --git a/test/FixIt/fixit-cxx11-compat.cpp b/test/FixIt/fixit-cxx11-compat.cpp new file mode 100644 index 0000000000000..39ae439d266b6 --- /dev/null +++ b/test/FixIt/fixit-cxx11-compat.cpp @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -Wc++11-compat -verify -std=c++98 %s +// RUN: cp %s %t +// RUN: not %clang_cc1 -Wc++11-compat -Werror -x c++ -std=c++98 -fixit %t +// RUN: %clang_cc1 -Wall -pedantic-errors -Wc++11-compat -Werror -x c++ -std=c++98 %t + +// This is a test of the code modification hints for C++11-compatibility problems. + +#define bar "bar" +const char *p = "foo"bar; // expected-warning {{will be treated as a reserved user-defined literal suffix}} +#define _bar "_bar" +const char *q = "foo"_bar; // expected-warning {{will be treated as a user-defined literal suffix}} diff --git a/test/FixIt/fixit-missing-method-return-type.m b/test/FixIt/fixit-missing-method-return-type.m index 027c89572ff96..769fbe8921b3c 100644 --- a/test/FixIt/fixit-missing-method-return-type.m +++ b/test/FixIt/fixit-missing-method-return-type.m @@ -1,12 +1,12 @@ // Objective-C recovery // RUN: cp %s %t -// RUN: %clang_cc1 -Wmissing-method-return-type -fixit -x objective-c %t -// RUN: %clang_cc1 -fsyntax-only -pedantic -Wmissing-method-return-type -Werror -x objective-c %t +// RUN: %clang_cc1 -Wmissing-method-return-type -fixit -x objective-c -Wno-objc-root-class %t +// RUN: %clang_cc1 -fsyntax-only -pedantic -Wmissing-method-return-type -Werror -x objective-c -Wno-objc-root-class %t // Objective-C++ recovery // RUN: cp %s %t -// RUN: %clang_cc1 -Wmissing-method-return-type -fixit -x objective-c++ %t -// RUN: %clang_cc1 -fsyntax-only -pedantic -Wmissing-method-return-type -Werror -x objective-c++ %t +// RUN: %clang_cc1 -Wmissing-method-return-type -fixit -x objective-c++ -Wno-objc-root-class %t +// RUN: %clang_cc1 -fsyntax-only -pedantic -Wmissing-method-return-type -Werror -x objective-c++ -Wno-objc-root-class %t // rdar://9615045 @interface I diff --git a/test/FixIt/fixit-recompile.c b/test/FixIt/fixit-recompile.c new file mode 100644 index 0000000000000..a2e62fbddcdb5 --- /dev/null +++ b/test/FixIt/fixit-recompile.c @@ -0,0 +1,6 @@ +// RUN: %clang_cc1 -Werror -pedantic %s -fixit-recompile -fixit-to-temporary -E -o - | FileCheck %s +// RUN: not %clang_cc1 -Werror -pedantic %s -fixit-recompile -fixit-to-temporary -fix-only-warnings + +_Complex cd; + +// CHECK: _Complex double cd; diff --git a/test/FixIt/fixit-recursive-block.c b/test/FixIt/fixit-recursive-block.c new file mode 100644 index 0000000000000..b276b417ac963 --- /dev/null +++ b/test/FixIt/fixit-recursive-block.c @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -Wuninitialized -fblocks -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck %s +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -Wuninitialized -fblocks -verify %s + +// rdar://10817031 + +int main() { + void (^arc_fail)() = ^() { // expected-warning {{block pointer variable 'arc_fail' is uninitialized when captured by block}} \ + // expected-note {{maybe you meant to use __block 'arc_fail'}} + arc_fail(); // BOOM + }; +} +// CHECK: {7:12-7:12}:"__block " diff --git a/test/FixIt/fixit-vexing-parse-cxx0x.cpp b/test/FixIt/fixit-vexing-parse-cxx0x.cpp new file mode 100644 index 0000000000000..a870794b27ced --- /dev/null +++ b/test/FixIt/fixit-vexing-parse-cxx0x.cpp @@ -0,0 +1,21 @@ +// RUN: %clang_cc1 -verify -x c++ -std=c++11 %s +// RUN: %clang_cc1 -fdiagnostics-parseable-fixits -x c++ -std=c++11 %s 2>&1 | FileCheck %s + +struct X { + int i; +}; + +void func() { + // CHECK: fix-it:"{{.*}}":{10:6-10:8}:"{}" + X x(); // expected-warning {{function declaration}} expected-note{{replace parentheses with an initializer}} + + typedef int *Ptr; + // CHECK: fix-it:"{{.*}}":{14:8-14:10}:" = nullptr" + Ptr p(); // expected-warning {{function declaration}} expected-note {{replace parentheses with an initializer}} + + // CHECK: fix-it:"{{.*}}":{17:15-17:17}:" = u'\\0'" + char16_t u16(); // expected-warning {{function declaration}} expected-note {{replace parentheses with an initializer}} + + // CHECK: fix-it:"{{.*}}":{20:15-20:17}:" = U'\\0'" + char32_t u32(); // expected-warning {{function declaration}} expected-note {{replace parentheses with an initializer}} +} diff --git a/test/FixIt/fixit-vexing-parse.cpp b/test/FixIt/fixit-vexing-parse.cpp new file mode 100644 index 0000000000000..8450590c67f9c --- /dev/null +++ b/test/FixIt/fixit-vexing-parse.cpp @@ -0,0 +1,89 @@ +// RUN: %clang_cc1 -verify -x c++ %s +// RUN: %clang_cc1 -fdiagnostics-parseable-fixits -x c++ %s 2>&1 | FileCheck %s + +struct S { + int n; +}; + +struct T { + T(); + int n; +}; + +struct U { + ~U(); + int n; +}; + +struct V { + ~V(); +}; + +struct W : V { +}; + +struct X : U { +}; + +int F1(); +S F2(); + +namespace N { + void test() { + // CHECK: fix-it:"{{.*}}":{34:9-34:11}:" = {}" + S s1(); // expected-warning {{function declaration}} expected-note {{replace parentheses with an initializer}} + + // CHECK: fix-it:"{{.*}}":{38:9-38:10}:";" + // CHECK: fix-it:"{{.*}}":{39:7-39:9}:" = {}" + S s2, // expected-note {{change this ',' to a ';' to call 'F2'}} + F2(); // expected-warning {{function declaration}} expected-note {{replace parentheses with an initializer}} + + // CHECK: fix-it:"{{.*}}":{43:9-43:11}:"" + // CHECK: fix-it:"{{.*}}":{44:9-44:11}:"" + T t1(), // expected-warning {{function declaration}} expected-note {{remove parentheses}} + t2(); // expected-warning {{function declaration}} expected-note {{remove parentheses}} + + // CHECK: fix-it:"{{.*}}":{47:8-47:10}:" = {}" + U u(); // expected-warning {{function declaration}} expected-note {{replace parentheses with an initializer}} + + // CHECK: fix-it:"{{.*}}":{50:8-50:10}:"" + V v(); // expected-warning {{function declaration}} expected-note {{remove parentheses}} + + // CHECK: fix-it:"{{.*}}":{53:8-53:10}:"" + W w(); // expected-warning {{function declaration}} expected-note {{remove parentheses}} + + // TODO: Removing the parens here would not initialize U::n. + // Maybe suggest an " = X()" initializer for this case? + // Maybe suggest removing the parens anyway? + X x(); // expected-warning {{function declaration}} + + // CHECK: fix-it:"{{.*}}":{61:11-61:13}:" = 0" + int n1(); // expected-warning {{function declaration}} expected-note {{replace parentheses with an initializer}} + + // CHECK: fix-it:"{{.*}}":{65:11-65:12}:";" + // CHECK: fix-it:"{{.*}}":{66:7-66:9}:" = 0" + int n2, // expected-note {{change this ',' to a ';' to call 'F1'}} + F1(); // expected-warning {{function declaration}} expected-note {{replace parentheses with an initializer}} + + // CHECK: fix-it:"{{.*}}":{69:13-69:15}:" = 0.0" + double d(); // expected-warning {{function declaration}} expected-note {{replace parentheses with an initializer}} + + typedef void *Ptr; + + // CHECK: fix-it:"{{.*}}":{74:10-74:12}:" = 0" + Ptr p(); // expected-warning {{function declaration}} expected-note {{replace parentheses with an initializer}} + +#define NULL 0 + // CHECK: fix-it:"{{.*}}":{78:10-78:12}:" = NULL" + Ptr p(); // expected-warning {{function declaration}} expected-note {{replace parentheses with an initializer}} + + // CHECK: fix-it:"{{.*}}":{81:11-81:13}:" = false" + bool b(); // expected-warning {{function declaration}} expected-note {{replace parentheses with an initializer}} + + // CHECK: fix-it:"{{.*}}":{84:11-84:13}:" = '\\0'" + char c(); // expected-warning {{function declaration}} expected-note {{replace parentheses with an initializer}} + + // CHECK: fix-it:"{{.*}}":{87:15-87:17}:" = L'\\0'" + wchar_t wc(); // expected-warning {{function declaration}} expected-note {{replace parentheses with an initializer}} + } +} diff --git a/test/FixIt/fixit.c b/test/FixIt/fixit.c index 5ba0aac4509b6..5e4947b8cdd69 100644 --- a/test/FixIt/fixit.c +++ b/test/FixIt/fixit.c @@ -1,3 +1,4 @@ +// 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 @@ -12,22 +13,24 @@ // FIXME: FIX-IT should add #include <string.h>? int strcmp(const char *s1, const char *s2); -void f0(void) { }; +void f0(void) { }; // expected-warning {{';'}} struct s { - int x, y;; + int x, y;; // expected-warning {{extra ';'}} }; // CHECK: _Complex double cd; -_Complex cd; +_Complex cd; // expected-warning {{assuming '_Complex double'}} // CHECK: struct s s0 = { .y = 5 }; -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 }; +int array0[5] = { [3] 3 }; // expected-warning {{GNU 'missing ='}} -void f1(x, y) +// CHECK: int x +// CHECK: int y +void f1(x, y) // expected-warning 2{{defaulting to type 'int'}} { } @@ -36,16 +39,16 @@ int i0 = { 17 }; #define ONE 1 #define TWO 2 -int test_cond(int y, int fooBar) { +int test_cond(int y, int fooBar) { // expected-note {{here}} // CHECK: int x = y ? 1 : 4+fooBar; - 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; + x = y ? ONE TWO; // expected-error {{':'}} expected-note {{to match}} return x; } -// CHECK: typedef int int_t; -typedef typedef int int_t; +// CHECK: const typedef int int_t; +const typedef typedef int int_t; // expected-warning {{duplicate 'typedef'}} // <rdar://problem/7159693> enum Color { @@ -61,12 +64,39 @@ struct test_struct { }; void removeUnusedLabels(char c) { - L0 /*removed comment*/: c++; + L0 /*removed comment*/: c++; // expected-warning {{unused label}} removeUnusedLabels(c); - L1: + L1: // expected-warning {{unused label}} c++; - /*preserved comment*/ L2 : c++; - LL + /*preserved comment*/ L2 : c++; // expected-warning {{unused label}} + LL // expected-warning {{unused label}} : c++; - c = c + 3; L4: return; + 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; } diff --git a/test/FixIt/fixit.cpp b/test/FixIt/fixit.cpp index 785b92b2d8179..7d531a537a354 100644 --- a/test/FixIt/fixit.cpp +++ b/test/FixIt/fixit.cpp @@ -1,6 +1,7 @@ +// RUN: %clang_cc1 -pedantic -Wall -Wno-comment -verify -fcxx-exceptions -x c++ %s // RUN: cp %s %t -// RUN: not %clang_cc1 -pedantic -Wall -fixit -x c++ %t -// RUN: %clang_cc1 -fsyntax-only -pedantic -Wall -Werror -x c++ %t +// RUN: not %clang_cc1 -pedantic -Wall -Wno-comment -fcxx-exceptions -fixit -x c++ %t +// RUN: %clang_cc1 -fsyntax-only -pedantic -Wall -Werror -Wno-comment -fcxx-exceptions -x c++ %t /* This is a test of the various code modification hints that are provided as part of warning or extension diagnostics. All of the @@ -28,7 +29,7 @@ public: struct CT<0> { }; // expected-error{{'template<>'}} -template<> class CT<1> { }; // expected-error{{tag type}} +template<> union CT<1> { }; // expected-error{{tag type}} // Access declarations class A { @@ -40,7 +41,7 @@ class B : public A { A::foo; // expected-warning{{access declarations are deprecated}} }; -void f() throw(); +void f() throw(); // expected-note{{previous}} void f(); // expected-warning{{missing exception specification}} namespace rdar7853795 { @@ -63,18 +64,72 @@ namespace rdar7796492 { // extra qualification on member class C { - int C::foo(); + int C::foo(); // expected-warning {{extra qualification}} }; namespace rdar8488464 { -int x == 0; // expected-error {{invalid '==' at end of declaration; did you mean '='?}} +int x = 0; +int x1 &= 0; // expected-error {{invalid '&=' at end of declaration; did you mean '='?}} +int x2 *= 0; // expected-error {{invalid '*=' at end of declaration; did you mean '='?}} +int x3 += 0; // expected-error {{invalid '+=' at end of declaration; did you mean '='?}} +int x4 -= 0; // expected-error {{invalid '-=' at end of declaration; did you mean '='?}} +int x5 != 0; // expected-error {{invalid '!=' at end of declaration; did you mean '='?}} +int x6 /= 0; // expected-error {{invalid '/=' at end of declaration; did you mean '='?}} +int x7 %= 0; // expected-error {{invalid '%=' at end of declaration; did you mean '='?}} +int x8 <= 0; // expected-error {{invalid '<=' at end of declaration; did you mean '='?}} +int x9 <<= 0; // expected-error {{invalid '<<=' at end of declaration; did you mean '='?}} +int x10 >= 0; // expected-error {{invalid '>=' at end of declaration; did you mean '='?}} +int x11 >>= 0; // expected-error {{invalid '>>=' at end of declaration; did you mean '='?}} +int x12 ^= 0; // expected-error {{invalid '^=' at end of declaration; did you mean '='?}} +int x13 |= 0; // expected-error {{invalid '|=' at end of declaration; did you mean '='?}} +int x14 == 0; // expected-error {{invalid '==' at end of declaration; did you mean '='?}} void f() { - int x == 0; // expected-error {{invalid '==' at end of declaration; did you mean '='?}} + int x = 0; (void)x; - if (int x == 0) { // expected-error {{invalid '==' at end of declaration; did you mean '='?}} - (void)x; - } + int x1 &= 0; // expected-error {{invalid '&=' at end of declaration; did you mean '='?}} + (void)x1; + int x2 *= 0; // expected-error {{invalid '*=' at end of declaration; did you mean '='?}} + (void)x2; + int x3 += 0; // expected-error {{invalid '+=' at end of declaration; did you mean '='?}} + (void)x3; + int x4 -= 0; // expected-error {{invalid '-=' at end of declaration; did you mean '='?}} + (void)x4; + int x5 != 0; // expected-error {{invalid '!=' at end of declaration; did you mean '='?}} + (void)x5; + int x6 /= 0; // expected-error {{invalid '/=' at end of declaration; did you mean '='?}} + (void)x6; + int x7 %= 0; // expected-error {{invalid '%=' at end of declaration; did you mean '='?}} + (void)x7; + int x8 <= 0; // expected-error {{invalid '<=' at end of declaration; did you mean '='?}} + (void)x8; + int x9 <<= 0; // expected-error {{invalid '<<=' at end of declaration; did you mean '='?}} + (void)x9; + int x10 >= 0; // expected-error {{invalid '>=' at end of declaration; did you mean '='?}} + (void)x10; + int x11 >>= 0; // expected-error {{invalid '>>=' at end of declaration; did you mean '='?}} + (void)x11; + int x12 ^= 0; // expected-error {{invalid '^=' at end of declaration; did you mean '='?}} + (void)x12; + int x13 |= 0; // expected-error {{invalid '|=' at end of declaration; did you mean '='?}} + (void)x13; + int x14 == 0; // expected-error {{invalid '==' at end of declaration; did you mean '='?}} + (void)x14; + if (int x = 0) { (void)x; } + if (int x1 &= 0) { (void)x1; } // expected-error {{invalid '&=' at end of declaration; did you mean '='?}} + if (int x2 *= 0) { (void)x2; } // expected-error {{invalid '*=' at end of declaration; did you mean '='?}} + if (int x3 += 0) { (void)x3; } // expected-error {{invalid '+=' at end of declaration; did you mean '='?}} + if (int x4 -= 0) { (void)x4; } // expected-error {{invalid '-=' at end of declaration; did you mean '='?}} + if (int x5 != 0) { (void)x5; } // expected-error {{invalid '!=' at end of declaration; did you mean '='?}} + if (int x6 /= 0) { (void)x6; } // expected-error {{invalid '/=' at end of declaration; did you mean '='?}} + if (int x7 %= 0) { (void)x7; } // expected-error {{invalid '%=' at end of declaration; did you mean '='?}} + if (int x8 <= 0) { (void)x8; } // expected-error {{invalid '<=' at end of declaration; did you mean '='?}} + if (int x9 <<= 0) { (void)x9; } // expected-error {{invalid '<<=' at end of declaration; did you mean '='?}} + if (int x10 >= 0) { (void)x10; } // expected-error {{invalid '>=' at end of declaration; did you mean '='?}} + if (int x11 >>= 0) { (void)x11; } // expected-error {{invalid '>>=' at end of declaration; did you mean '='?}} + if (int x12 ^= 0) { (void)x12; } // expected-error {{invalid '^=' at end of declaration; did you mean '='?}} + if (int x13 |= 0) { (void)x13; } // expected-error {{invalid '|=' at end of declaration; did you mean '='?}} + if (int x14 == 0) { (void)x14; } // expected-error {{invalid '==' at end of declaration; did you mean '='?}} } } @@ -104,7 +159,48 @@ void test (BD &br) { AD* aPtr; BD b; aPtr = b; // expected-error {{assigning to 'AD *' from incompatible type 'BD'; take the address with &}} - aPtr = br; // expected-error {{assigning to 'A *' from incompatible type 'B'; take the address with &}} + aPtr = br; // expected-error {{assigning to 'AD *' from incompatible type 'BD'; take the address with &}} +} + +void foo1() const {} // expected-error {{non-member function cannot have 'const' qualifier}} +void foo2() volatile {} // expected-error {{non-member function cannot have 'volatile' qualifier}} +void foo3() const volatile {} // expected-error {{non-member function cannot have 'const volatile' qualifier}} + +struct S { void f(int, char); }; +int itsAComma, +itsAComma2 = 0, +oopsAComma(42), // expected-error {{expected ';' at end of declaration}} +AD oopsMoreCommas() { + static int n = 0, // expected-error {{expected ';' at end of declaration}} + static char c, + &d = c, // expected-error {{expected ';' at end of declaration}} + S s, // expected-error {{expected ';' at end of declaration}} + s.f(n, d); + AD ad, // expected-error {{expected ';' at end of declaration}} + return ad; } +struct MoreAccidentalCommas { + int a : 5, + b : 7, + : 4, // expected-error {{expected ';' at end of declaration}} + char c, // expected-error {{expected ';' at end of declaration}} + double d, // expected-error {{expected ';' at end of declaration}} + MoreAccidentalCommas *next, // expected-error {{expected ';' at end of declaration}} +public: + int k, // expected-error {{expected ';' at end of declaration}} + friend void f(MoreAccidentalCommas) {} + int k2, // expected-error {{expected ';' at end of declaration}} + virtual void g(), // expected-error {{expected ';' at end of declaration}} +}; +template<class T> struct Mystery; +template<class T> typedef Mystery<T>::type getMysteriousThing() { // \ + expected-error {{function definition declared 'typedef'}} \ + expected-error {{missing 'typename' prior to dependent}} + return Mystery<T>::get(); +} +template<template<typename> Foo, // expected-error {{template template parameter requires 'class' after the parameter list}} + template<typename> typename Bar, // expected-error {{template template parameter requires 'class' after the parameter list}} + template<typename> struct Baz> // expected-error {{template template parameter requires 'class' after the parameter list}} +void func(); diff --git a/test/FixIt/no-fixit.cpp b/test/FixIt/no-fixit.cpp new file mode 100644 index 0000000000000..c95c8670d6d21 --- /dev/null +++ b/test/FixIt/no-fixit.cpp @@ -0,0 +1,7 @@ +// RUN: %clang_cc1 -fdiagnostics-parseable-fixits -x c++ -std=c++11 %s 2>&1 | FileCheck %s + +// test that the diagnostics produced by this code do not include fixit hints + +// CHECK-NOT: fix-it: + +template<template<typename> +> void func(); diff --git a/test/FixIt/objc-literals.m b/test/FixIt/objc-literals.m new file mode 100644 index 0000000000000..03d64b156496b --- /dev/null +++ b/test/FixIt/objc-literals.m @@ -0,0 +1,44 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s +// RUN: cp %s %t +// RUN: not %clang_cc1 -fsyntax-only -fixit -x objective-c %t +// RUN: %clang_cc1 -fsyntax-only -pedantic -Werror -x objective-c %t +// RUN: grep arrayWithObjects %t + +typedef unsigned char BOOL; + +@interface NSNumber @end + +@interface NSNumber (NSNumberCreation) ++ (NSNumber *)numberWithChar:(char)value; ++ (NSNumber *)numberWithUnsignedChar:(unsigned char)value; ++ (NSNumber *)numberWithShort:(short)value; ++ (NSNumber *)numberWithUnsignedShort:(unsigned short)value; ++ (NSNumber *)numberWithInt:(int)value; ++ (NSNumber *)numberWithUnsignedInt:(unsigned int)value; ++ (NSNumber *)numberWithLong:(long)value; ++ (NSNumber *)numberWithUnsignedLong:(unsigned long)value; ++ (NSNumber *)numberWithLongLong:(long long)value; ++ (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value; ++ (NSNumber *)numberWithFloat:(float)value; ++ (NSNumber *)numberWithDouble:(double)value; ++ (NSNumber *)numberWithBool:(BOOL)value; +@end + +@interface NSArray +@end + +@interface NSArray (NSArrayCreation) ++ (id)arrayWithObjects:(const id [])objects count:(unsigned long)cnt; +@end + +@interface NSDictionary ++ (id)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; +@end + +void fixes() { + id arr = @[ + 17, // expected-error{{numeric literal must be prefixed by '@' in a collection}} + 'a', // expected-error{{character literal must be prefixed by '@'}} + "blah" // expected-error{{string literal must be prefixed by '@'}} + ]; +} diff --git a/test/FixIt/typo-crash.cpp b/test/FixIt/typo-crash.cpp index 92d20377e8868..c154e3baba4f8 100644 --- a/test/FixIt/typo-crash.cpp +++ b/test/FixIt/typo-crash.cpp @@ -10,3 +10,20 @@ template<typename T> void template_id1() { // expected-note {{'template_id1' dec // expected-error {{reference to overloaded function could not be resolved; did you mean to call it?}} \ // expected-error {{use of undeclared identifier 't'}} } + +// FIXME: It would be nice if we could get this correction right. +namespace PR12297 { + namespace A { + typedef short T; + + namespace B { + typedef short T; + + T global(); // expected-note {{'A::B::global' declared here}} + } + } + + using namespace A::B; + + T A::global(); // expected-error {{out-of-line definition of 'global' does not match any declaration in namespace 'PR12297::A'; did you mean 'A::B::global'?}} +} diff --git a/test/FixIt/typo.c b/test/FixIt/typo.c index 88d9dc62a1f23..0bafd1b9903e5 100644 --- a/test/FixIt/typo.c +++ b/test/FixIt/typo.c @@ -30,7 +30,7 @@ void test() { r1.top_left.x = 0; typedef struct Rectangle Rectangle; // expected-note{{'Rectangle' declared here}} - rectangle *r2 = &r1; // expected-error{{ unknown type name 'rectangle'; did you mean 'Rectangle'?}} + rectangle *r2 = &r1; // expected-error{{unknown type name 'rectangle'; did you mean 'Rectangle'?}} r2->top_left.y = 0; unsinged *ptr = 0; // expected-error{{use of undeclared identifier 'unsinged'; did you mean 'unsigned'?}} *ptr = 17; diff --git a/test/FixIt/typo.m b/test/FixIt/typo.m index a474035021e6d..381233f95c29a 100644 --- a/test/FixIt/typo.m +++ b/test/FixIt/typo.m @@ -1,7 +1,7 @@ -// RUN: %clang_cc1 -fsyntax-only -triple x86_64-apple-darwin10 -DNON_FIXITS -verify %s +// RUN: %clang_cc1 -fsyntax-only -triple x86_64-apple-darwin10 -DNON_FIXITS -verify -Wno-objc-root-class %s // RUN: cp %s %t -// RUN: not %clang_cc1 -x objective-c -fsyntax-only -triple x86_64-apple-darwin10 -fixit %t -// RUN: %clang_cc1 -x objective-c -fsyntax-only -triple x86_64-apple-darwin10 -pedantic -Werror %t +// RUN: not %clang_cc1 -x objective-c -fsyntax-only -triple x86_64-apple-darwin10 -fixit -Wno-objc-root-class %t +// RUN: %clang_cc1 -x objective-c -fsyntax-only -triple x86_64-apple-darwin10 -pedantic -Werror -Wno-objc-root-class %t // RUN: grep "@implementation Sub3" %t @interface NSString // expected-note 2{{'NSString' declared here}} |