Akira Hatanaka via cfe-commits <cfe-commits@lists.llvm.org> writes: > ahatanak created this revision. > ahatanak added a subscriber: cfe-commits. > > This patch fixes a crash that occurs when __kindof is incorrectly used > in the type parameter list of an interface. The crash occurs because > ObjCTypeParamList::back() is called in checkTypeParamListConsistency > on an empty list: > > 00762 diagLoc = > S.getLocForEndOfToken(newTypeParams->back()->getLocEnd()); > > http://reviews.llvm.org/D15463 > > Files: > lib/Parse/ParseObjc.cpp > test/SemaObjC/kindof.m > > Index: test/SemaObjC/kindof.m > =================================================================== > --- test/SemaObjC/kindof.m > +++ test/SemaObjC/kindof.m > @@ -302,3 +302,13 @@ > void processCopyable(__typeof(getSomeCopyable()) string); > processCopyable(0); // expected-warning{{null passed to a callee that > requires a non-null argument}} > } > + > +// __kinddof cannot be used in parameter list. > +@interface Array1<T> : NSObject > +@end > + > +@interface I1 : NSObject > +@end > + > +@interface Array1<__kindof I1*>(extensions) // // expected-error{{expected > type parameter name}} > +@end > Index: lib/Parse/ParseObjc.cpp > =================================================================== > --- lib/Parse/ParseObjc.cpp > +++ lib/Parse/ParseObjc.cpp > @@ -603,7 +603,7 @@ > // whether there are any protocol references. > lAngleLoc = SourceLocation(); > rAngleLoc = SourceLocation(); > - return list; > + return invalid ? nullptr : list;
This looks a bit suspicious to me. Since `invalid` is set *way* earlier in the function, it seems like we should be able to return earlier if this is correct, and not even call actOnObjCTypeParamList. OTOH, are there cases where `invalid == true` but list is non-empty? If so, are we doing the right thing when that happens? > } > > /// Parse an objc-type-parameter-list. > > _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits