[cfe-commits] r70878 - in /cfe/trunk: include/clang/Parse/Action.h lib/Parse/ParseObjc.cpp lib/Sema/Sema.h lib/Sema/SemaDeclAttr.cpp lib/Sema/SemaDeclObjC.cpp test/Analysis/retain-release.m

Ted Kremenek kremenek at apple.com
Mon May 4 10:04:31 PDT 2009


Author: kremenek
Date: Mon May  4 12:04:30 2009
New Revision: 70878

URL: http://llvm.org/viewvc/llvm-project?rev=70878&view=rev
Log:
Remove support for ObjCMethodDecl attributes that appear between the
return type and the selector.  This is inconsistent with C functions
(where such attributes would be placed on the return type, not the the
FunctionDecl), and is inconsistent with what people are use to seeing.

Modified:
    cfe/trunk/include/clang/Parse/Action.h
    cfe/trunk/lib/Parse/ParseObjc.cpp
    cfe/trunk/lib/Sema/Sema.h
    cfe/trunk/lib/Sema/SemaDeclAttr.cpp
    cfe/trunk/lib/Sema/SemaDeclObjC.cpp
    cfe/trunk/test/Analysis/retain-release.m

Modified: cfe/trunk/include/clang/Parse/Action.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Parse/Action.h?rev=70878&r1=70877&r2=70878&view=diff

==============================================================================
--- cfe/trunk/include/clang/Parse/Action.h (original)
+++ cfe/trunk/include/clang/Parse/Action.h Mon May  4 12:04:30 2009
@@ -1439,7 +1439,6 @@
     Selector Sel,              // a unique name for the method.
     ObjCArgInfo *ArgInfo,      // ArgInfo: Has 'Sel.getNumArgs()' entries.
     llvm::SmallVectorImpl<Declarator> &Cdecls, // c-style args
-    AttributeList *ReturnAttrList, // optional
     AttributeList *MethodAttrList, // optional
     // tok::objc_not_keyword, tok::objc_optional, tok::objc_required    
     tok::ObjCKeywordKind impKind,

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

==============================================================================
--- cfe/trunk/lib/Parse/ParseObjc.cpp (original)
+++ cfe/trunk/lib/Parse/ParseObjc.cpp Mon May  4 12:04:30 2009
@@ -677,12 +677,6 @@
   if (Tok.is(tok::l_paren))
     ReturnType = ParseObjCTypeName(DSRet);
   
-  // Parse attributes that can appear before the selector.
-  AttributeList *ReturnAttrs = 0;
-
-  if (getLang().ObjC2 && Tok.is(tok::kw___attribute)) 
-    ReturnAttrs = ParseAttributes();  
-  
   SourceLocation selLoc;
   IdentifierInfo *SelIdent = ParseObjCSelectorPiece(selLoc);
 
@@ -705,8 +699,8 @@
     Selector Sel = PP.getSelectorTable().getNullarySelector(SelIdent);
     return Actions.ActOnMethodDeclaration(mLoc, Tok.getLocation(),
                                           mType, IDecl, DSRet, ReturnType, Sel,
-                                          0, CargNames, ReturnAttrs, 
-                                          MethodAttrs, MethodImplKind);
+                                          0, CargNames, MethodAttrs,
+                                          MethodImplKind);
   }
 
   llvm::SmallVector<IdentifierInfo *, 12> KeyIdents;
@@ -779,8 +773,7 @@
                                                    &KeyIdents[0]);
   return Actions.ActOnMethodDeclaration(mLoc, Tok.getLocation(),
                                         mType, IDecl, DSRet, ReturnType, Sel, 
-                                        &ArgInfos[0], CargNames, ReturnAttrs,
-                                        MethodAttrs,
+                                        &ArgInfos[0], CargNames, MethodAttrs,
                                         MethodImplKind, isVariadic);
 }
 

Modified: cfe/trunk/lib/Sema/Sema.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Sema.h?rev=70878&r1=70877&r2=70878&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/Sema.h (original)
+++ cfe/trunk/lib/Sema/Sema.h Mon May  4 12:04:30 2009
@@ -1098,9 +1098,6 @@
   // Decl attributes - this routine is the top level dispatcher. 
   void ProcessDeclAttributes(Decl *D, const Declarator &PD);
   void ProcessDeclAttributeList(Decl *D, const AttributeList *AttrList);
-  
-  void ProcessObjCMethDeclReturnAttributeList(ObjCMethodDecl *D,
-                                              const AttributeList *AttrList);
 
   void WarnUndefinedMethod(SourceLocation ImpLoc, ObjCMethodDecl *method,
                            bool &IncompleteImpl);
@@ -2227,7 +2224,6 @@
     // from the Sel.getNumArgs().
     ObjCArgInfo *ArgInfo,
     llvm::SmallVectorImpl<Declarator> &Cdecls,
-    AttributeList *ReturnAttrList,
     AttributeList *AttrList, tok::ObjCKeywordKind MethodImplKind,
     bool isVariadic = false);
 

Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=70878&r1=70877&r2=70878&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclAttr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Mon May  4 12:04:30 2009
@@ -1719,37 +1719,3 @@
   if (const AttributeList *Attrs = PD.getAttributes())
     ProcessDeclAttributeList(D, Attrs);
 }
-
-
-/// ProcessObjCMethDeclReturnAttribute - Apply the specific attribute to the
-///   specified ObjCMethodDecl.  This is a separate codepath because it
-///   corresponds to attributes applied essentially to the return type of
-///   an Objective-C method declaration (as opposed to attributes that hang off
-///   the end of the method declaration).
-static void ProcessObjCMethDeclReturnAttribute(Decl *D,
-                                               const AttributeList &Attr,
-                                               Sema &S) {
-  switch (Attr.getKind()) {
-      // Checker-specific.
-    case AttributeList::AT_objc_ownership_returns:
-      HandleObjCOwnershipReturnsAttr(D, Attr, S); break;
-      break;
-    default:
-      S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName();
-      break;
-  }
-}
-
-/// ProcessObjCMethDeclAttributeList - Apply all the decl attributes in the
-///  specified attribute list to the specified ObjCMethodDecl.  This is
-///  a separate codepath because it corresponds to attributes applied
-///  essentiallyto the return type of an Objective-C method declaration
-///  (as opposed to attributes that hang off the end of the method declaration).
-void Sema::ProcessObjCMethDeclReturnAttributeList(ObjCMethodDecl *D,
-                                                  const AttributeList *AttrList)
-{
-  while (AttrList) {
-    ProcessObjCMethDeclReturnAttribute(D, *AttrList, *this);
-    AttrList = AttrList->getNext();
-  }
-}

Modified: cfe/trunk/lib/Sema/SemaDeclObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclObjC.cpp?rev=70878&r1=70877&r2=70878&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclObjC.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclObjC.cpp Mon May  4 12:04:30 2009
@@ -1557,7 +1557,6 @@
     // from the Sel.getNumArgs().
     ObjCArgInfo *ArgInfo,
     llvm::SmallVectorImpl<Declarator> &Cdecls,
-    AttributeList *ReturnAttrList,                                             
     AttributeList *AttrList, tok::ObjCKeywordKind MethodDeclKind,
     bool isVariadic) {
   Decl *ClassDecl = classDecl.getAs<Decl>();
@@ -1640,9 +1639,6 @@
   if (AttrList)
     ProcessDeclAttributeList(ObjCMethod, AttrList);
   
-  if (ReturnAttrList)
-    ProcessObjCMethDeclReturnAttributeList(ObjCMethod, ReturnAttrList);
- 
   // For implementations (which can be very "coarse grain"), we add the 
   // method now. This allows the AST to implement lookup methods that work 
   // incrementally (without waiting until we parse the @end). It also allows 

Modified: cfe/trunk/test/Analysis/retain-release.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/retain-release.m?rev=70878&r1=70877&r2=70878&view=diff

==============================================================================
--- cfe/trunk/test/Analysis/retain-release.m (original)
+++ cfe/trunk/test/Analysis/retain-release.m Mon May  4 12:04:30 2009
@@ -431,11 +431,7 @@
 //===----------------------------------------------------------------------===//
 
 @interface TestOwnershipAttr : NSObject
-- (NSString*)  __attribute__((objc_ownership_returns)) returnsAnOwnedString;
-// Soon we won't accept __attribute__((objc_ownership_returns)) at the end
-// of a method decl.
-- (NSString*) returnsAnOwnedString2 __attribute__((objc_ownership_returns));
-
+- (NSString*) returnsAnOwnedString  __attribute__((objc_ownership_returns));
 - (void) myRetain:(id)__attribute__((objc_ownership_retain))obj;
 - (void) myCFRetain:(id)__attribute__((objc_ownership_cfretain))obj;
 - (void) myRelease:(id)__attribute__((objc_ownership_release))obj;





More information about the cfe-commits mailing list