[PATCH] handle invalid calls to built-ins with no prototype (PR 83603)

Jeff Law law@redhat.com
Tue Jan 2 23:30:00 GMT 2018


On 01/01/2018 05:58 PM, Martin Sebor wrote:
> The -Wrestrict code assumes that built-ins are called with
> the correct number of arguments.  When this isn't so it
> crashes.  The attached patch avoids the ICE due to this
> error.
> 
> There are outstanding assumptions that the type of actual
> arguments to built-ins declared without a prototype matches
> the expected type.  Those will be corrected in a subsequent
> patch.
> 
> Martin
> 
> gcc-83603.diff
> 
> 
> PR tree-optimization/83603 - ICE in builtin_memref at gcc/gimple-ssa-warn-restrict.c:238
> 
> gcc/ChangeLog:
> 
> 	PR tree-optimization/83603
> 	* calls.c (maybe_warn_nonstring_arg): Avoid accessing function
> 	arguments past the endof the argument list in functions declared
> 	without a prototype.
> 	* gimple-ssa-warn-restrict.c (wrestrict_dom_walker::check_call):
> 	Avoid checking when arguments are null.
OK.

Presumably we're not getting syntax errors precisely because we're
calling these functions without an in-scope prototype?

I wouldn't at all be surprised to find other passes mis-handling that
case.  The idioms you're using to get the arguments are similar to code
I've seen elsewhere -- it's probably just harder to trigger the failures
because analysis of the mem* or str* call is conditional on surrounding
context.

Jeff



More information about the Gcc-patches mailing list