[clang] 2e4f5e6 - [Sema] Fix an assert when objc_externally_retained was applied to an unprototyped function

Erik Pilkington via cfe-commits cfe-commits at lists.llvm.org
Fri Feb 28 15:49:26 PST 2020


Author: Erik Pilkington
Date: 2020-02-28T15:49:16-08:00
New Revision: 2e4f5e629de8ba77ae6facba5c595ef23d95acf4

URL: https://github.com/llvm/llvm-project/commit/2e4f5e629de8ba77ae6facba5c595ef23d95acf4
DIFF: https://github.com/llvm/llvm-project/commit/2e4f5e629de8ba77ae6facba5c595ef23d95acf4.diff

LOG: [Sema] Fix an assert when objc_externally_retained was applied to an unprototyped function

rdar://58893199

Added: 
    

Modified: 
    clang/lib/Sema/SemaDeclAttr.cpp
    clang/test/SemaObjC/externally-retained.m

Removed: 
    


################################################################################
diff  --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp
index cf3fa3855cc8..3a6c2af30d8b 100644
--- a/clang/lib/Sema/SemaDeclAttr.cpp
+++ b/clang/lib/Sema/SemaDeclAttr.cpp
@@ -6561,7 +6561,9 @@ static void handleObjCExternallyRetainedAttr(Sema &S, Decl *D,
 
   // If D is a function-like declaration (method, block, or function), then we
   // make every parameter psuedo-strong.
-  for (unsigned I = 0, E = getFunctionOrMethodNumParams(D); I != E; ++I) {
+  unsigned NumParams =
+      hasFunctionProto(D) ? getFunctionOrMethodNumParams(D) : 0;
+  for (unsigned I = 0; I != NumParams; ++I) {
     auto *PVD = const_cast<ParmVarDecl *>(getFunctionOrMethodParam(D, I));
     QualType Ty = PVD->getType();
 

diff  --git a/clang/test/SemaObjC/externally-retained.m b/clang/test/SemaObjC/externally-retained.m
index 24c531ccf739..f9fbdb068944 100644
--- a/clang/test/SemaObjC/externally-retained.m
+++ b/clang/test/SemaObjC/externally-retained.m
@@ -118,3 +118,6 @@ void test13(ObjCTy *first, __weak ObjCTy *second, __unsafe_unretained ObjCTy *th
 }
 
 #pragma clang attribute ext_ret.pop
+
+__attribute__((objc_externally_retained))
+void unprototyped();


        


More information about the cfe-commits mailing list