On 3/11/24 4:38 PM, Eric Botcazou wrote:
Hi,

this is a regression present on all active branches: the attached Ada testcase
triggers an assertion failure when compiled with -O2 -gnatp -flto:

   /* Initialize the static chain.  */
   p = DECL_STRUCT_FUNCTION (fn)->static_chain_decl;
   gcc_assert (fn != current_function_decl);
   if (p)
     {
       /* No static chain?  Seems like a bug in tree-nested.cc.  */
       gcc_assert (static_chain);                                  <--- here

       setup_one_parameter (id, p, static_chain, fn, bb, &vars);
     }

The problem is that the ICF pass identifies two functions, one of which has a
static chain but the other does not.  The proposed fix is just to prevent this
identification from occurring.

Tested on x86-64/Linux, OK for all active branches?


2024-03-11  Eric Botcazou  <ebotca...@adacore.com>

        PR ipa/113996
        * ipa-icf.h (sem_function): Add static_chain_present member.
        * ipa-icf.cc (sem_function::get_hash): Hash it.
        (sem_function::equals_wpa): Compare it.
        (sem_function::equals_private): Likewise.
        (sem_function::init): Initialize it.


2024-03-11  Eric Botcazou  <ebotca...@adacore.com>

        * gnat.dg/lto27.adb: New test.
OK.
jeff

Reply via email to