------- Comment #2 from burnus at gcc dot gnu dot org 2009-06-30 09:46 ------- array(:,1) = 0 would then become ARRAY_RANGE_REF <array, ...> = { }
and array(:,1) = [1,2,3] would then become ARRAY_RANGE_REF <array, ...> = { 1,2,3 } If I recall correctly, using memcopy/memset causes alias analysis problems as pointerOpteratingFunction(array,...) marks "array" as maybe-aliasing, cf. PR 40168 and especially http://gcc.gnu.org/ml/fortran/2009-05/msg00287.html * * * ARRAY_REF These nodes represent array accesses. The first operand is the array; the second is the index. To calculate the address of the memory accessed, you must scale the index by the size of the type of the array elements. The type of these expressions must be the type of a component of the array. The third and fourth operands are used after gimplification to represent the lower bound and component size but should not be used directly; call array_ref_low_bound and array_ref_element_size instead. ARRAY_RANGE_REF These nodes represent access to a range (or slice) of an array. The operands are the same as that for ARRAY_REF and have the same meanings. The type of these expressions must be an array whose component type is the same as that of the first operand. The range of that array type determines the amount of data these expressions access. (from http://gcc.gnu.org/onlinedocs/gccint/Expression-trees.html) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40598