From: jakub Date: Thu, 17 Oct 2019 07:21:24 +0000 (+0000) Subject: PR tree-optimization/92056 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bb2c0c3e52b6088778afa41fb8b726ff9efb5605;p=thirdparty%2Fgcc.git 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@277093 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5fccbd4d1d88..0dd5d8ca839b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 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. + PR tree-optimization/92115 * tree-ssa-ifcombine.c (ifcombine_ifandif): Force condition into temporary if it could trap. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c79ba7b989a1..eb3112d2672b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2019-10-17 Jakub Jelinek + PR tree-optimization/92056 + * gcc.c-torture/compile/pr92056.c: New test. + PR tree-optimization/92115 * gcc.dg/pr92115.c: 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 db9b5694e85d..6e79bbd1d917 100644 --- a/gcc/tree-object-size.c +++ b/gcc/tree-object-size.c @@ -903,6 +903,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