From: Jakub Jelinek Date: Mon, 21 Oct 2019 11:49:18 +0000 (+0200) Subject: backport: re PR tree-optimization/92056 (ice in expr_object_size, at tree-object... X-Git-Tag: releases/gcc-9.3.0~509 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=71ff84826d66b8b3553ea234138db096de8c1eee;p=thirdparty%2Fgcc.git backport: re PR tree-optimization/92056 (ice in expr_object_size, at tree-object-si ze.c:675 with -O3) Backported from mainline 2019-10-17 Jakub Jelinek PR tree-optimization/92056 * tree-object-size.c (cond_expr_object_size): Return early if then_ processing resulted in unknown size. * gcc.c-torture/compile/pr92056.c: New test. From-SVN: r277259 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a217f56d4da4..d213669fdb48 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,12 @@ 2019-10-21 Jakub Jelinek Backported from mainline + 2019-10-17 Jakub Jelinek + + PR tree-optimization/92056 + * tree-object-size.c (cond_expr_object_size): Return early if then_ + processing resulted in unknown size. + 2019-10-05 Jakub Jelinek PR tree-optimization/91734 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 33b55ce7ae19..54707bd1e067 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -3,6 +3,9 @@ Backported from mainline 2019-10-17 Jakub Jelinek + PR tree-optimization/92056 + * gcc.c-torture/compile/pr92056.c: New test. + PR fortran/87752 * gfortran.dg/gomp/pr87752.f90: New test. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr92056.c b/gcc/testsuite/gcc.c-torture/compile/pr92056.c new file mode 100644 index 000000000000..d04da763e158 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr92056.c @@ -0,0 +1,18 @@ +/* PR tree-optimization/92056 */ + +const char *d; + +void +foo (int c, char *e, const char *a, const char *b) +{ + switch (c) + { + case 33: + for (;; d++) + if (__builtin_strcmp (b ? : "", d)) + return; + break; + case 4: + __builtin_sprintf (e, a); + } +} diff --git a/gcc/tree-object-size.c b/gcc/tree-object-size.c index f9ad7e83943e..25c5ced57b71 100644 --- a/gcc/tree-object-size.c +++ b/gcc/tree-object-size.c @@ -890,6 +890,9 @@ cond_expr_object_size (struct object_size_info *osi, tree var, gimple *stmt) else expr_object_size (osi, var, then_); + if (object_sizes[object_size_type][varno] == unknown[object_size_type]) + return reexamine; + if (TREE_CODE (else_) == SSA_NAME) reexamine |= merge_object_sizes (osi, var, else_, 0); else