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

--- Comment #20 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
> Looking at the dumps:
> 
> --- a/a-except.adb.006t.original
> +++ b/a-except.adb.006t.original
> @@ -782,7 +782,7 @@ void
> ada.exceptions.exception_propagation.gnat_gcc_exception_cleanup (system__ex
>      struct system__exceptions__machine__gnat_gcc_exception * {ref-all} copy
> = excep;
>    if (copy != 0B)
>      {
> -      .gnat_free (copy);
> +      .gnat_free (*((void * *) copy + 18446744073709551608));
>        copy = 0B;
>      }
>    else
> 
> ?!

I agree that this looks frightening at first sight. ;-)  This comes from the
realignment business in ada/gcc-interface/utils2.cc:maybe_wrap_{malloc,free}.

What happens is that -march=x86-64-v3 bumps the BIGGEST_ALIGNMENT setting of
the i386 back-end wrt -march=x86-64-v2; now the malloc side is still compiled
with -march=x86-64-v2 whereas the free side is compiled with -march=x86-64-v3,
hence the discrepancy.  So this is a latent Ada build issue exposed by the
change.

Thanks for the detailed investigation!

Reply via email to