Hi,
the fortran testcase mismatches parameter count on inlined function and makes 
us to ICE
on out of bounds array acces in remap_predicate.
Fixed thus.

Bootstrapped/regtested x86_64-linux, committed.
        PR middle-end/49494
        * ipa-inline-analysis.c (remap_predicate): Add bounds check.
        * gfortran.dg/pr49494.f90: New testcase.
Index: testsuite/gfortran.dg/pr49494.f90
===================================================================
*** testsuite/gfortran.dg/pr49494.f90   (revision 0)
--- testsuite/gfortran.dg/pr49494.f90   (revision 0)
***************
*** 0 ****
--- 1,12 ----
+ ! { dg-do compile }
+ ! { dg-options "-O -findirect-inlining -fno-guess-branch-probability 
-finline-functions -finline-small-functions" }
+ function more_OK (fcn)
+   character(*) more_OK
+   character (*), external :: fcn
+   more_OK = fcn ()
+ end function more_OK
+   character(4) :: answer
+   character(4), external :: is_OK, more_OK
+   answer = more_OK (is_OK)
+ contains
+ END
Index: ipa-inline-analysis.c
===================================================================
*** ipa-inline-analysis.c       (revision 177482)
--- ipa-inline-analysis.c       (working copy)
*************** remap_predicate (struct inline_summary *
*** 1873,1878 ****
--- 1873,1879 ----
                 /* See if we can remap condition operand to caller's operand.
                    Otherwise give up.  */
                 if (!operand_map
+                    || VEC_length (int, operand_map) <= c->operand_num
                     || VEC_index (int, operand_map, c->operand_num) == -1)
                   cond_predicate = true_predicate ();
                 else

Reply via email to