From: David Malcolm Date: Mon, 7 Sep 2020 21:16:37 +0000 (-0400) Subject: analyzer: fix ICE on machine-specific builtins [PR96962] X-Git-Tag: basepoints/gcc-12~5207 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=47997a32e63b77ec88a7131a5d540f108c698661;p=thirdparty%2Fgcc.git 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. --- diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc index a7bc48115eec..e6a9d3cacd83 100644 --- a/gcc/analyzer/region-model.cc +++ b/gcc/analyzer/region-model.cc @@ -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)) {