This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PR33749 - Wrong evaluation of expressions in lhs of assignment statements


This is by way of an appeal...
This bug only appears in -m32 or, rather, it disappears in -m64. What
is odd is that an entire block of code produced by the scalarizer
appears and disappears according to the mode. What is even odder is
that I cannot even figure out how the correct code is ever produced.
This:
 integer(4) :: p(4) = (/2,4,1,3/)
 p(p) = (/(i, i = 1, 4)/)
 print *, p
end
with -m64 produces:
 static int4 p[4] = {2, 4, 1, 3};
 int4 i;
 static int4 options.0[7] = {68, 127, 0, 0, 0, 1, 0};
 _gfortran_set_options (7, (void *) &options.0);
 {
 int8 A.3[4];
 struct array1_int8 atmp.2;
 static int4 A.1[4] = {1, 2, 3, 4};
 atmp.2.dtype = 521;
 atmp.2.dim[0].stride = 1;
 atmp.2.dim[0].lbound = 0;
 atmp.2.dim[0].ubound = 3;
 atmp.2.data = (void *) &A.3;
 atmp.2.offset = 0;
 {
 int8 S.4;
 S.4 = 0;
 while (1)
 {
 if (S.4 > 3) goto L.1;
 (*(int8[0:] *) atmp.2.data)[S.4] = (int8) p[S.4];
 S.4 = S.4 + 1;
 }
 L.1:;
 }
 {
 int8 S.5;
 S.5 = 0;
 while (1)
 {
 if (S.5 > 3) goto L.2;
 {
 int8 D.875;
 D.875 = (*(int8[0:] *) atmp.2.data)[S.5];
 p[D.875 + -1] = A.1[S.5];
 }
 S.5 = S.5 + 1;
 }
 L.2:;
 }
 }
........+ the io.....
but the block that produces D.875 goes away in -m32 mode, so that the
assignment becomes, incorrectly:
 D.513 = (*(int4[0:] *) parm.2.data)[parm.2.dim[0].stride *
NON_LVALUE_EXPR <S.3>];
 p[D.513 + -1] = A.1[S.3];
an anybody cast any light on this? It's driving me bonkers...
Paul
-- 
The knack of flying is learning how to throw yourself at the ground and miss.
 --Hitchhikers Guide to the Galaxy

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

AltStyle によって変換されたページ (->オリジナル) /