------- Comment #10 from burnus at gcc dot gnu dot org 2008-10-18 11:36 ------- Somehow reading the bug report first before replying helps ... Ignore the crap I just wrote.
Dick's (comment 0) CALL MVBITS ((ILA1(NFV3)), 2, 4, ILA1, 3) !fails is valid as the first and the fourth argument don't refer to the same variable - the first argument is an expression for which a temporary needs to be created. Ditto for FX's (comment 1) call mvbits ((ILA1((/9/))), 2, 4, ILA1, 3) However, comment 7's CALL copy (a((/ 2, 1 /)), a) is wrong as one passes twice the same variable - once as array section and once as whole array. There an outer ( ... ) is missing which is needed to makes this an expression. For a lengthy answer including where to find it in the standard, see: http://groups.google.com/group/comp.lang.fortran/browse_thread/thread/160867d13fd90927/ Seemingly somewhere (x) is simplified to x (= EXPR_VARIABLE) and thus no temporary is created - or something like that. For non-elemental procedures this was fixed in gfortran 4.3; before foo((x),x) was optimized to foo((x),x). One can probably ignore all examples after comment 1 and start with looking why no temporary is created for comment 1 - afterwards one needs to check comment 0. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35681