1! { dg-do run } 2! { dg-options "-O3 -fdump-tree-original" } 3! Tests the fix for PR33850, in which one of the two assignments 4! below would produce an unnecessary temporary for the index 5! expression, following the fix for PR33749. 6! 7! Contributed by Dick Hendrickson on comp.lang.fortran, 8! " Most elegant syntax for inverting a permutation?" 20071006 9! 10 integer(4) :: p4(4) = (/2,4,1,3/) 11 integer(4) :: q4(4) = (/2,4,1,3/) 12 integer(8) :: p8(4) = (/2,4,1,3/) 13 integer(8) :: q8(4) = (/2,4,1,3/) 14 p4(q4) = (/(i, i = 1, 4)/) 15 q4(q4) = (/(i, i = 1, 4)/) 16 p8(q8) = (/(i, i = 1, 4)/) 17 q8(q8) = (/(i, i = 1, 4)/) 18 if (any(p4 .ne. q4)) STOP 1 19 if (any(p8 .ne. q8)) STOP 2 20end 21! Whichever is the default length for array indices will yield 22! parm 18 times, because a temporary is not necessary. The other 23! cases will all yield a temporary, so that atmp appears 18 times. 24! Note that it is the kind conversion that generates the temp. 25! 26! { dg-final { scan-tree-dump-times "parm" 20 "original" } } 27! { dg-final { scan-tree-dump-times "atmp" 20 "original" } } 28