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