https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114859
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Ever confirmed|0 |1 CC| |pault at gcc dot gnu.org Priority|P3 |P2 Last reconfirmed| |2024-04-26 Target Milestone|--- |14.0 Summary|Seeing new segmentation |[14 Regression] Seeing new |fault in same_type_as |segmentation fault in | |same_type_as since r14-9752 --- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Bisection shows the only change on that CU in that range is r14-9752-g35408b3669fac104cd380582b32e32c64a603d8b and the changes are mostly in the save_smoothers subroutine. diff -upb on the original dump between r14-9751 and r14-9752 is: --- amg_d_hierarchy_bld.f90.005t.original_ 2024-04-26 12:41:01.409999711 -0400 +++ amg_d_hierarchy_bld.f90.005t.original 2024-04-26 12:42:21.511060046 -0400 @@ -211,9 +211,6 @@ void restore_smoothers (struct amg_d_one __attribute__((fn spec (". . w w w "))) void save_smoothers (struct amg_d_onelev_type & restrict level, struct __class_amg_d_base_smoother_mod_Amg_d_base_smoother_type_a & restrict save1, struct __class_amg_d_base_smoother_mod_Amg_d_base_smoother_type_a & restrict save2, integer(kind=4) & restrict info) { - { - integer(kind=4) stat.18; - *info = 0; if (save1->_data != 0B) { @@ -328,7 +325,6 @@ void save_smoothers (struct amg_d_onelev } if (__builtin_expect ((integer(kind=8)) (stat.18 != 0), 0, 44)) goto L.34; (struct __vtype_amg_d_base_smoother_mod_Amg_d_base_smoother_type *) save1->_vptr = (struct __vtype_amg_d_base_smoother_mod_Amg_d_base_smoother_type *) level->sm._vptr; - (void) __builtin_memcpy ((void *) save1->_data, (void *) save1->_vptr->_def_init, (unsigned long) save1->_vptr->_size); L.34:; *info = stat.18; if (*info == 0) @@ -344,11 +340,11 @@ void save_smoothers (struct amg_d_onelev } } L.36:; - if (*info == 0 && level->sm2a._data != 0B) - { { integer(kind=4) stat.21; + if (*info == 0 && level->sm2a._data != 0B) + { if (__builtin_expect ((integer(kind=8)) (save2->_data != 0B), 0, 45)) { stat.21 = 5014; @@ -364,7 +360,6 @@ void save_smoothers (struct amg_d_onelev } if (__builtin_expect ((integer(kind=8)) (stat.21 != 0), 0, 44)) goto L.38; (struct __vtype_amg_d_base_smoother_mod_Amg_d_base_smoother_type *) save2->_vptr = (struct __vtype_amg_d_base_smoother_mod_Amg_d_base_smoother_type *) level->sm2a._vptr; - (void) __builtin_memcpy ((void *) save2->_data, (void *) save2->_vptr->_def_init, (unsigned long) save2->_vptr->_size); L.38:; *info = stat.21; if (*info == 0) @@ -384,15 +379,13 @@ void save_smoothers (struct amg_d_onelev } L.37:; return; - } } __attribute__((fn spec (". . . . w "))) void amg_d_hierarchy_bld (struct psb_dspmat_type & a, struct psb_desc_type & desc_a, struct __class_amg_d_prec_type_Amg_dprec_type_t & prec, integer(kind=4) & restrict info) { - static void restore_smoothers (struct amg_d_onelev_type &, struct __class_amg_d_base_smoother_mod_Amg_d_base_smoother_type_a & restrict, struct __class_amg_d_base_smoother_mod_Amg_d_base_smoother_type_a & restrict, integer(kind=4) & restrict); - static void save_smoothers (struct amg_d_onelev_type & restrict, struct __class_amg_d_base_smoother_mod_Amg_d_base_smoother_type_a & restrict, struct __class_amg_d_base_smoother_mod_Amg_d_base_smoother_type_a & restrict, integer(kind=4) & restrict); + integer(kind=4) stat.18; integer(kind=8) D.9689; integer(kind=8) D.9690; integer(kind=8) D.9691; so guess the only significant change is the removal of the two __builtin_memcpy calls.