diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2010-03-24 18:08:23 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2010-03-24 18:08:23 +0000 |
commit | f3c0bd58400b5a84d16376436e40af79e2d7b105 (patch) | |
tree | b4d65e4a0b7896f2ec613a73a53a38331fc679a9 | |
parent | 036ada215d2c53e6a286b42d7cbd2386b0007516 (diff) |
Improve diagnostics when ivar added to class
extension (radar 6812436).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99408 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Basic/DiagnosticSemaKinds.td | 3 | ||||
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 2 | ||||
-rw-r--r-- | test/SemaObjC/ivar-in-class-extension-error.m | 15 |
3 files changed, 18 insertions, 2 deletions
diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index c563d11643..18f3329f25 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -1544,7 +1544,8 @@ def err_forward_ref_enum : Error< "ISO C++ forbids forward references to 'enum' types">; def err_redefinition_of_enumerator : Error<"redefinition of enumerator %0">; def err_duplicate_member : Error<"duplicate member %0">; -def err_misplaced_ivar : Error<"ivars may not be placed in categories">; +def err_misplaced_ivar : Error< + "ivars may not be placed in %select{categories|class extension}0">; def ext_enum_value_not_int : Extension< "ISO C restricts enumerator values to range of 'int' (%0 is too " "%select{small|large}1)">; diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index e4c930e2f8..87b2f80886 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -5850,7 +5850,7 @@ void Sema::ActOnFields(Scope* S, } else if (ObjCCategoryDecl *CDecl = dyn_cast<ObjCCategoryDecl>(EnclosingDecl)) { if (!LangOpts.ObjCNonFragileABI2 || !CDecl->IsClassExtension()) - Diag(LBrac, diag::err_misplaced_ivar); + Diag(LBrac, diag::err_misplaced_ivar) << CDecl->IsClassExtension(); else { // FIXME. Class extension does not have a LocEnd field. // CDecl->setLocEnd(RBrac); diff --git a/test/SemaObjC/ivar-in-class-extension-error.m b/test/SemaObjC/ivar-in-class-extension-error.m new file mode 100644 index 0000000000..ffc0e8b839 --- /dev/null +++ b/test/SemaObjC/ivar-in-class-extension-error.m @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s +// rdar:// 6812436 + +@interface A @end + +@interface A () { // expected-error {{ivars may not be placed in class extension}} + int _p0; +} +@property int p0; +@end + +@interface A(CAT) { // expected-error {{ivars may not be placed in categories}} + int _p1; +} +@end |