]> granicus.if.org Git - clang/commitdiff
Improve diagnostics when ivar added to class
authorFariborz Jahanian <fjahanian@apple.com>
Wed, 24 Mar 2010 18:08:23 +0000 (18:08 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Wed, 24 Mar 2010 18:08:23 +0000 (18:08 +0000)
extension (radar 6812436).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99408 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaDecl.cpp
test/SemaObjC/ivar-in-class-extension-error.m [new file with mode: 0644]

index c563d116432ecb4e7e30f5e29a3fc023d17042a6..18f3329f25d7612c649732a3d5c464b90ff772a2 100644 (file)
@@ -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)">;
index e4c930e2f857c9b627f3590ee582d89bad76df2c..87b2f8088674c1a6414e0abadcb96f72522bb320 100644 (file)
@@ -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 (file)
index 0000000..ffc0e8b
--- /dev/null
@@ -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