------- Additional Comments From eedelman at acclab dot helsinki dot fi  
2005-05-06 16:59 -------
(In reply to comment #2)
> Reduced testcase (I tried not to reduce it too much):
>       subroutine  difq3 (jmax, ngmax, ams)
>       implicit none
>       integer*4 :: jmax, ngmax
>       real*8, dimension(32) ::  ams
>       real*8, dimension(32) ::  edd
>       integer*4 :: j
>       forall (j=2:jmax)
>          ams(1:ngmax)= edd(j-1)
>       end forall
>       end
> 
> 
> But note I get a warning with ICC:
> fortcom: Warning: t.f, line 8: All active combinations of index-names are not
used within the variable 
> being defined (i.e., leftside) of this assignment-stmt.   [AMS]
>          ams(1:ngmax)= edd(j-1)
> .........^
> 
> So I don't know if this code is valid or not.

I don't think it is valid; from the F2003 (draft) standard, section 7.4.4.4:

"A many-to-one assignment is more than one assignment to the same object, or
association of more than one target with the same pointer, whether the object is
referenced directly or indirectly through a pointer. A many-to-one assignment
shall not occur within a single statement in a FORALL construct or
statement."

In any case, that code does not make much sense to me: different values are
assigned to the same variable in undefined order (or even simultaneously).

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21409

Reply via email to