[cfe-commits] r99408 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td lib/Sema/SemaDecl.cpp test/SemaObjC/ivar-in-class-extension-error.m

Fariborz Jahanian fjahanian at apple.com
Wed Mar 24 11:08:23 PDT 2010


Author: fjahanian
Date: Wed Mar 24 13:08:23 2010
New Revision: 99408

URL: http://llvm.org/viewvc/llvm-project?rev=99408&view=rev
Log:
Improve diagnostics when ivar added to class
extension (radar 6812436).

Added:
    cfe/trunk/test/SemaObjC/ivar-in-class-extension-error.m
Modified:
    cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
    cfe/trunk/lib/Sema/SemaDecl.cpp

Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=99408&r1=99407&r2=99408&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Wed Mar 24 13:08:23 2010
@@ -1544,7 +1544,8 @@
   "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)">;

Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=99408&r1=99407&r2=99408&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Wed Mar 24 13:08:23 2010
@@ -5850,7 +5850,7 @@
     } 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);

Added: cfe/trunk/test/SemaObjC/ivar-in-class-extension-error.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/ivar-in-class-extension-error.m?rev=99408&view=auto
==============================================================================
--- cfe/trunk/test/SemaObjC/ivar-in-class-extension-error.m (added)
+++ cfe/trunk/test/SemaObjC/ivar-in-class-extension-error.m Wed Mar 24 13:08:23 2010
@@ -0,0 +1,15 @@
+// RUN: %clang_cc1  -fsyntax-only -verify %s
+// rdar:// 6812436
+
+ at interface A @end
+
+ at interface A () { // expected-error {{ivars may not be placed in class extension}}
+  int _p0;
+}
+ at property int p0;
+ at end
+
+ at interface A(CAT) { // expected-error {{ivars may not be placed in categories}}
+  int _p1;
+}
+ at end





More information about the cfe-commits mailing list