Le 05/08/2024 à 10:59, Jakub Jelinek a écrit :
On Fri, Aug 02, 2024 at 06:29:27PM +0200, Mikael Morin wrote:
I agree with all of that. Sure keeping the condition around would be the
safest. I'm just afraid of keeping code that would remain dead.
And the pasto fix would guess fix
aliasing_dummy_5.f90 with
arg(2:3) = arr(1:2)
instead of
arr(2:3) = arg(1:2)
if the original testcase would actually fail.
Mmh, aren't they both actually the same?
They can alias, and they do alias. So in the end, writing either line is
equivalent, what do I miss?
So, I had another look. Seems the reason why the testcase passes is that
gfc_could_be_alias (called from gfc_conv_resolve_dependencies) returns true,
so the assignment goes through a temporary array.
gfc_check_dependency is then only called for
if (lhs->rank > 0 && gfc_check_dependency (lhs, rhs, true) == 0)
optimize_binop_array_assignment (c, &rhs, false);
gfc_check_dependency is also used for WHERE and FORALL.
Guess the question is if one can construct a testcase where it would make a
difference.
The one I made up for PR116196 is a candidate, or can serve as base; I
think it's valid, but a bit twisted.