On Thu, 17 Oct 2019, Jakub Jelinek wrote:

> Hi!
> 
> The following bug has been introduced when cond_expr_object_size has been
> added in 2007.  We want to treat a COND_EXPR like a PHI with 2 arguments,
> and PHI is handled in a loop that breaks if the lhs value is unknown, and
> then does the if (TREE_CODE (arg) == SSA_NAME) merge_object_sizes else
> expr_object_size which is used even in places that handle just a single
> operand (with the lhs value initialized to the opposite value of unknown
> first).  At least expr_object_size asserts that the lhs value is not
> unknown at the start.
> 
> Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for
> trunk?

OK.

> 2019-10-17  Jakub Jelinek  <ja...@redhat.com>
> 
>       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.
> 
> --- gcc/tree-object-size.c.jj 2019-10-05 09:35:14.895967464 +0200
> +++ gcc/tree-object-size.c    2019-10-16 15:34:11.414769994 +0200
> @@ -903,6 +903,9 @@ cond_expr_object_size (struct object_siz
>    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
> --- gcc/testsuite/gcc.c-torture/compile/pr92056.c.jj  2019-10-16 
> 15:42:56.042848440 +0200
> +++ gcc/testsuite/gcc.c-torture/compile/pr92056.c     2019-10-16 
> 15:42:41.595066602 +0200
> @@ -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);
> +    }
> +}
> 
>       Jakub
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)

Reply via email to