On December 12, 2021 9:35:00 PM GMT+01:00, Jan Hubicka via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: >Hi, >In evaluate_conditions_for_known_args we use range_fold_unary_expr and >range_fold_binary_expr to produce value ranges of the expression. >However the expression also may contain ternary COND_EXPR on which we >ICE. I did not find interface to do similar folding easily on ternary >exprs and since it is so rare case, i guess we can just punt and give up >on producing it. > >Bootstrapped/regtsted x86_64-linux, OK?
Ok. Richard. >gcc/ChangeLog: > >2021-12-12 Jan Hubicka <hubi...@ucw.cz> > > * ipa-fnsummary.c (evaluate_conditions_for_known_args): Do not ICE > on ternary expression. > >gcc/testsuite/ChangeLog: > >2021-12-12 Jan Hubicka <hubi...@ucw.cz> > > * gcc.c-torture/compile/pr103513.c: New test. > >diff --git a/gcc/ipa-fnsummary.c b/gcc/ipa-fnsummary.c >index 6c1cdf17e47..cb3c198ec0c 100644 >--- a/gcc/ipa-fnsummary.c >+++ b/gcc/ipa-fnsummary.c >@@ -513,7 +513,7 @@ evaluate_conditions_for_known_args (struct cgraph_node >*node, > op->index ? &vr : &op0); > } > else >- gcc_unreachable (); >+ res.set_varying (op->type); > type = op->type; > vr = res; > } >diff --git a/gcc/testsuite/gcc.c-torture/compile/pr103513.c >b/gcc/testsuite/gcc.c-torture/compile/pr103513.c >new file mode 100644 >index 00000000000..ca876a9816c >--- /dev/null >+++ b/gcc/testsuite/gcc.c-torture/compile/pr103513.c >@@ -0,0 +1,8 @@ >+int a; >+void b(int c) { >+ int d = 3; >+ d ^= c < 2; >+ if (d < 3 && a) >+ while (1) >+ b(!a); >+}