analyzer: fix ICE on machine-specific builtins [PR96962]

In g:ee7bfbe5eb70a23bbf3a2cedfdcbd2ea1a20c3f2 I added a
  switch (DECL_UNCHECKED_FUNCTION_CODE (callee_fndecl))
to region_model::on_call_pre guarded by
  fndecl_built_in_p (callee_fndecl).
I meant to handle only normal built-ins, whereas this
single-argument overload of fndecl_built_in_p returns true for any
kind of built-in.

PR analyzer/96962 reports a case where this matches for a
machine-specific builtin, leading to an ICE.  Fixed thusly.

gcc/analyzer/ChangeLog:
	PR analyzer/96962
	* region-model.cc (region_model::on_call_pre): Fix guard on switch
	on built-ins to only consider BUILT_IN_NORMAL, rather than other
	kinds of build-ins.
This commit is contained in:
David Malcolm 2020-09-07 17:16:37 -04:00
parent 19b0fed7c2
commit 47997a32e6
1 changed files with 1 additions and 1 deletions

View File

@ -653,7 +653,7 @@ region_model::on_call_pre (const gcall *call, region_model_context *ctxt)
Having them split out into separate functions makes it easier
to put breakpoints on the handling of specific functions. */
if (fndecl_built_in_p (callee_fndecl)
if (fndecl_built_in_p (callee_fndecl, BUILT_IN_NORMAL)
&& gimple_builtin_call_types_compatible_p (call, callee_fndecl))
switch (DECL_UNCHECKED_FUNCTION_CODE (callee_fndecl))
{