[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