diff options
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/include/clang/Basic/DiagnosticSemaKinds.td | 3 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 2 | ||||
| -rw-r--r-- | clang/test/SemaObjC/ivar-in-class-extension-error.m | 15 | 
3 files changed, 18 insertions, 2 deletions
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index c563d116432..18f3329f25d 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/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/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index e4c930e2f85..87b2f808867 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/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/clang/test/SemaObjC/ivar-in-class-extension-error.m b/clang/test/SemaObjC/ivar-in-class-extension-error.m new file mode 100644 index 00000000000..ffc0e8b8390 --- /dev/null +++ b/clang/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  | 

