On Thu, Jan 23, 2025 at 11:37 AM Jakub Jelinek <ja...@redhat.com> wrote:
>
> Hi!
>
> The assume_query constructor does
> assume_query::assume_query (function *f, bitmap p) : m_parm_list (p),
>                                                      m_func (f)
> where m_parm_list is bitmap &.  This is compile time UB, because
> as soon as the constructor returns, m_parm_list reference is still
> bound to the parameter of the constructor which is no longer in scope.
>
> Now, one possible fix would be change the ctor argument to be bitmap &,
> but that doesn't really work because in the only user of that class
> we have
>       auto_bitmap decls;
> ...
>       assume_query query (fun, decls);
> and auto_bitmap just has
>   operator bitmap () { return &m_bits; }
> Could be perhaps const bitmap &, but why?  bitmap is a pointer:
> typedef class bitmap_head *bitmap;
> and the EXECUTE_IF_SET_IN_BITMAP macros don't really change that point,
> they just inspect what is inside of that bitmap_head the pointer points
> to.
>
> So, the simplest I think is avoid references (which cause even worse
> code as it has to be dereferenced twice rather than once).
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

OK.

Richard.

> 2025-01-23  Jakub Jelinek  <ja...@redhat.com>
>
>         PR tree-optimization/118605
>         * tree-assume.cc (assume_query::m_parm_list): Change type
>         from bitmap & to bitmap.
>
> --- gcc/tree-assume.cc.jj       2025-01-02 11:23:27.341365743 +0100
> +++ gcc/tree-assume.cc  2025-01-22 13:06:09.364187391 +0100
> @@ -97,7 +97,7 @@ protected:
>
>    ssa_lazy_cache m_path;   // Values found on path
>    ssa_lazy_cache m_parms;  // Cumulative parameter value calculated
> -  bitmap &m_parm_list;    // Parameter ssa-names list.
> +  bitmap m_parm_list;     // Parameter ssa-names list.
>    function *m_func;
>  };
>
>
>         Jakub
>

Reply via email to