From 71ff84826d66b8b3553ea234138db096de8c1eee Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 21 Oct 2019 13:49:18 +0200 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/gcc.c-torture/compile/pr92056.c | 18 ++++++++++++++++++ gcc/tree-object-size.c | 3 +++ 4 files changed, 30 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr92056.c 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 -- 2.47.2