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.

Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu.
Pushed to master as r11-3050-g47997a32e63b77ec88a7131a5d540f108c698661.

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.
---
 gcc/analyzer/region-model.cc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc
index a7bc48115ee..e6a9d3cacd8 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))
          {
-- 
2.26.2

Reply via email to