On Fri, 29 Oct 2021 21:36:26 +0200 Harald Anlauf via Gcc-patches <gcc-patc...@gcc.gnu.org> wrote:
> Dear Bernhard, all, > > Am 29.10.21 um 02:05 schrieb Bernhard Reutner-Fischer via Gcc-patches: > > >> diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c > >> index 53c760a6c38..cde34c67482 100644 > >> --- a/gcc/fortran/symbol.c > >> +++ b/gcc/fortran/symbol.c > > >> @@ -5052,7 +5052,7 @@ gfc_get_typebound_proc (gfc_typebound_proc *tb0) > >> > >> result = XCNEW (gfc_typebound_proc); > >> if (tb0) > >> - *result = *tb0; > >> + memcpy (result, tb0, sizeof (gfc_typebound_proc));; > >> result->error = 1; > >> > >> latest_undo_chgset->tbps.safe_push (result); > > > > > > please forgive me, but frankly speaking, I don't like this change. > > It seems to serve no obvious purpose other than obfuscating the code > and defeating the compiler's ability to detect type mismatches. mhm okay. IIRC these are folded to memcpy early on and in some projects with certain optimization levels results in an unobvious call to memcpy (which poses trouble if you want to avoid relocations at all cost which this might trigger if pulling in memcpy unexpectedly). f951 of course is not in the camp to bother much about this so i admit the change might stem from a tinfoil-hat moment of mine and might not be appropriate here. Although i don't buy the argument of the possibility of papering over type-mismatches in this particular case (the incoming arg is typed gfc_typebound_proc*, the result is typed gfc_typebound_proc*, the allocation is casted to gfc_typebound_proc*) we can certainly revert that hunk if folks prefer. > > I would not have OKed that part of the patch. For reference: gcc/fortran/symbol.c gfc_typebound_proc* gfc_get_typebound_proc (gfc_typebound_proc *tb0) { gfc_typebound_proc *result; result = XCNEW (gfc_typebound_proc); if (tb0) memcpy (result, tb0, sizeof (gfc_typebound_proc)); result->error = 1; latest_undo_chgset->tbps.safe_push (result); return result; } And i did - *result = *tb0; + memcpy (result, tb0, sizeof (gfc_typebound_proc)); > > Harald >