https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118605

--- Comment #7 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-14 branch has been updated by Jakub Jelinek
<ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:7a369b6a5589c7d9187701ee916f939307e00a86

commit r14-11287-g7a369b6a5589c7d9187701ee916f939307e00a86
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Thu Jan 23 11:46:18 2025 +0100

    tree-assume: Fix UB in assume_query [PR118605]

    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).

    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.

    (cherry picked from commit 27a05f8d11798889ecfb610db9bde781c3d218f7)

Reply via email to