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