[PATCH] D15463: [Objective-c] Fix a crash
Justin Bogner via cfe-commits
cfe-commits at lists.llvm.org
Mon Dec 14 10:39:41 PST 2015
Akira Hatanaka via cfe-commits <cfe-commits at 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.
> + at interface Array1<T> : NSObject
> + at end
> +
> + at interface I1 : NSObject
> + at end
> +
> + at interface Array1<__kindof I1*>(extensions) // // expected-error{{expected type parameter name}}
> + at 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.
>
>
More information about the cfe-commits
mailing list