On Tue, Jan 11, 2022 at 02:27:48PM +0530, Siddhesh Poyarekar wrote:
> Handle hints provided by __attribute__ ((access (...))) to compute
> dynamic sizes for objects.
> 
> gcc/ChangeLog:
> 
>       * tree-object-size.c: Include tree-dfa.h.
>       (parm_object_size): New function.
>       (collect_object_sizes_for): Call it.
> 
> gcc/testsuite/ChangeLog:
> 
>       * gcc.dg/builtin-dynamic-object-size-0.c (test_parmsz_simple,
>       test_parmsz_scaled, test_parmsz_unknown): New functions.
>       (main): Call them.  Add new arguments argc and argv.
> 
> Signed-off-by: Siddhesh Poyarekar <siddh...@gotplt.org>
> +      /* Walk through the parameters to pick the size parameter and safely
> +      scale it by the type size.  */
> +      for (arg = fnargs; arg; arg = TREE_CHAIN (arg), ++argpos)
> +     {
> +       if (argpos == access->sizarg && INTEGRAL_TYPE_P (TREE_TYPE (arg)))
> +         {
> +           sz = get_or_create_ssa_default_def (cfun, arg);
> +           if (sz != NULL_TREE)
> +             {
> +               sz = fold_convert (sizetype, sz);
> +               if (typesize)
> +                 sz = size_binop (MULT_EXPR, sz, typesize);
> +             }
> +           break;
> +         }
> +     }

No need for those {}s around the if as body of for, just use
      for (arg = fnargs; arg; arg = TREE_CHAIN (arg), ++argpos)
        if (argpos == access->sizarg && INTEGRAL_TYPE_P (TREE_TYPE (arg)))
          {
...
            break;
          }

Ok with that change.

        Jakub

Reply via email to