Hi Jakub,
Yes, that is what I had in mind. Being German I don't see any problem with the
explanation, but that is better judged by a native English speaker.
Is the send patch hunk intentional where only indentation is changed? I haven't
applied it though.
Thanks for the patch,
Andre
On Thu, 9 Jan 2025 16:32:42 +0100
Jakub Jelinek <[email protected]> wrote:
> On Thu, Jan 09, 2025 at 03:28:28PM +0100, Jakub Jelinek wrote:
> > So like this?
>
> Thomas mentioned bad wording in a private mail. Here is a better patch:
>
> 2025-01-09 Jakub Jelinek <[email protected]>
>
> PR fortran/118337
> * module.cc (use_iso_fortran_env_module): Add a comment explaining
> the optimization performed. Add gcc_checking_assert that i was
> incremented for all the elements. Formatting fix.
>
> --- gcc/fortran/module.cc.jj 2025-01-09 08:25:45.648324540 +0100
> +++ gcc/fortran/module.cc 2025-01-09 15:12:07.611842917 +0100
> @@ -7122,6 +7122,13 @@ use_iso_fortran_env_module (void)
> #include "iso-fortran-env.def"
> { ISOFORTRANENV_INVALID, NULL, -1234, 0 } };
>
> + /* We could have used c in the NAMED_{,U}INTCST macros
> + instead of 0, but then current g++ expands the initialization
> + as clearing the whole object followed by explicit stores of
> + all the non-zero elements (over 150), while by using 0s for
> + the non-constant initializers and initializing them afterwards
> + g++ will often copy everything from .rodata and then only override
> + over 30 non-constant ones. */
> i = 0;
> #define NAMED_INTCST(a,b,c,d) symbol[i++].value = c;
> #define NAMED_UINTCST(a,b,c,d) symbol[i++].value = c;
> @@ -7130,6 +7137,7 @@ use_iso_fortran_env_module (void)
> #define NAMED_FUNCTION(a,b,c,d) i++;
> #define NAMED_SUBROUTINE(a,b,c,d) i++;
> #include "iso-fortran-env.def"
> + gcc_checking_assert (i == (int) ARRAY_SIZE (symbol) - 1);
>
> /* Generate the symbol for the module itself. */
> mod_symtree = gfc_find_symtree (gfc_current_ns->sym_root, mod);
> @@ -7288,12 +7296,11 @@ use_iso_fortran_env_module (void)
> break;
>
> #define NAMED_FUNCTION(a,b,c,d) \
> - case a:
> + case a:
> #include "iso-fortran-env.def"
> - create_intrinsic_function (symbol[i].name, symbol[i].id,
> mod,
> - INTMOD_ISO_FORTRAN_ENV, false,
> - NULL);
> - break;
> + create_intrinsic_function (symbol[i].name, symbol[i].id, mod,
> + INTMOD_ISO_FORTRAN_ENV, false, NULL);
> + break;
>
> default:
> gcc_unreachable ();
>
>
> Jakub
>
--
Andre Vehreschild * Email: vehre ad gmx dot de