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

rdar://58893199
This commit is contained in:
Erik Pilkington 2020-02-28 15:24:23 -08:00
parent f668baa459
commit 2e4f5e629d
2 changed files with 6 additions and 1 deletions

View file

@ -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();

View file

@ -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();