On Mon, Jul 07, 2025 at 08:53:16PM +0200, Harald Anlauf wrote:
> Andre,
>
> I still don't get it, and the present version made it worse for me...
>
> So let's see what I was thinking. There are the following types of
> functions:
>
> (0) impure, non-elemental functions, which likely have side-effects
>
> (1) pure functions (in the f95 sense), i.e. pure non-elemental
>
> (2) pure elemental functions (in the f95 sense)
>
> (3) impure elemental functions (>= f2008)
It's now a bit more complicated. There are SIMPLE procedures,
but gfortran does not support that prefix yet.
> Note that I understand "pure elemental" being different from
> "pure and elemental" as used in the comment: the first version
> really means both pure and elemental, the second could be read
> as either pure or elemental or pure elemental. A native speaker
> may correct me if I am wrong...
>
> Back to gfortran: we have in decl.cc::gfc_match_prefix
>
> /* If IMPURE it not seen but the procedure is ELEMENTAL, mark it as PURE.
> */
> if (!seen_impure && current_attr.elemental && !current_attr.pure)
> {
> if (!gfc_add_pure (¤t_attr, NULL))
> goto error;
> }
>
> This explains the possible attributes we should see.
The standardese is
F2023, 15.9 Elemental procedures
...
An elemental subprogram has the prefix-spec ELEMENTAL. An
elemental subprogram is a pure subprogram unless it has the
prefix-spec IMPURE.
I think the rest of your observations/questions are spot-on.
--
steve