[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