[cfe-commits] r57805 - in /cfe/trunk: include/clang/Basic/DiagnosticKinds.def lib/Parse/ParseObjc.cpp test/SemaObjC/property-9.m

Chris Lattner sabre at nondot.org
Sun Oct 19 23:33:54 PDT 2008


Author: lattner
Date: Mon Oct 20 01:33:53 2008
New Revision: 57805

URL: http://llvm.org/viewvc/llvm-project?rev=57805&view=rev
Log:
fix a crash on unnamed properties like:
@property (readonly) int : 4;


Modified:
    cfe/trunk/include/clang/Basic/DiagnosticKinds.def
    cfe/trunk/lib/Parse/ParseObjc.cpp
    cfe/trunk/test/SemaObjC/property-9.m

Modified: cfe/trunk/include/clang/Basic/DiagnosticKinds.def
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticKinds.def?rev=57805&r1=57804&r2=57805&view=diff

==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticKinds.def (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticKinds.def Mon Oct 20 01:33:53 2008
@@ -418,6 +418,8 @@
      "illegal interface qualifier")
 DIAG(err_objc_expected_equal, ERROR,
      "setter/getter expects '=' followed by name")
+DIAG(err_objc_property_requires_field_name, ERROR,
+     "@property requires fields to be named")
 DIAG(err_objc_expected_property_attr, ERROR,
      "unknown property attribute detected")
 DIAG(err_objc_unexpected_attr, ERROR,

Modified: cfe/trunk/lib/Parse/ParseObjc.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseObjc.cpp?rev=57805&r1=57804&r2=57805&view=diff

==============================================================================
--- cfe/trunk/lib/Parse/ParseObjc.cpp (original)
+++ cfe/trunk/lib/Parse/ParseObjc.cpp Mon Oct 20 01:33:53 2008
@@ -316,21 +316,27 @@
       // Convert them all to property declarations.
       for (unsigned i = 0, e = FieldDeclarators.size(); i != e; ++i) {
         FieldDeclarator &FD = FieldDeclarators[i];
+        if (FD.D.getIdentifier() == 0) {
+          Diag(AtLoc, diag::err_objc_property_requires_field_name,
+               FD.D.getSourceRange());
+          continue;
+        }
+        
         // Install the property declarator into interfaceDecl.
+        IdentifierInfo *SelName =
+          OCDS.getGetterName() ? OCDS.getGetterName() : FD.D.getIdentifier();
+        
         Selector GetterSel = 
-          PP.getSelectorTable().getNullarySelector(OCDS.getGetterName() 
-                                                   ? OCDS.getGetterName() 
-                                                   : FD.D.getIdentifier());
+          PP.getSelectorTable().getNullarySelector(SelName);
         IdentifierInfo *SetterName = OCDS.getSetterName();
         if (!SetterName)
           SetterName = constructSetterName(PP.getIdentifierTable(),
                                            FD.D.getIdentifier());
         Selector SetterSel = 
           PP.getSelectorTable().getUnarySelector(SetterName);
-        DeclTy *Property = Actions.ActOnProperty(CurScope,
-                             AtLoc, FD, OCDS,
-                             GetterSel, SetterSel,
-                             MethodImplKind);
+        DeclTy *Property = Actions.ActOnProperty(CurScope, AtLoc, FD, OCDS,
+                                                 GetterSel, SetterSel,
+                                                 MethodImplKind);
         allProperties.push_back(Property);
       }
       break;

Modified: cfe/trunk/test/SemaObjC/property-9.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/property-9.m?rev=57805&r1=57804&r2=57805&view=diff

==============================================================================
--- cfe/trunk/test/SemaObjC/property-9.m (original)
+++ cfe/trunk/test/SemaObjC/property-9.m Mon Oct 20 01:33:53 2008
@@ -36,3 +36,15 @@
 @implementation MyClass
 @synthesize myIvar = _myIvar;
 @end
+
+
+ at interface BadPropClass
+{
+}
+
+ at property (readonly) int; // expected-warning {{declaration does not declare anything}}
+ at property (readonly) ; // expected-error {{type name requires a specifier or qualifier}} \
+                          expected-warning {{declaration does not declare anything}}
+ at property (readonly) int : 4; // expected-error {{property requires fields to be named}}
+
+ at end





More information about the cfe-commits mailing list