------- Comment #14 from burnus at gcc dot gnu dot org 2010-06-22 05:47 ------- > > Additionally allowed without temporary: > > sym->attr.dummy && sym->attr.intent == INTENT_OUT > > as > > "If a dummy argument has INTENT (OUT), the actual argument becomes > > undefined at the time the association is established" > > thus also any access via any method to that variable is undefined - and thus > > invalid. > > > > I think that the LHS is a dummy argument is a very common case and thus it > > makes sense to optimize for INTENT(OUT). > > Hmmm! I'll have to think about this business of dummies and their > intent. Perhaps you could give me an example, where this causes > aliasing?
Example: real :: a(100) call test(a) contains subroutine test(x) real, INTENT(OUT) :: x(:) x = f() end subroutine test Here, no temporary is needed for "x = f()": The dummy "x" is INTENT(OUT) thus the actual argument (i.e. "a") becomes undefined. Thus, the following function is invalid as "a" is (also) undefined in "f": function f() real :: f(100) f = a end function f end I think that your patch will generate a temporary in this case - it shouldn't. (Unfortunately, one cannot make similar assumptions for other intents :-( -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44582