This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/33317] CSHIFT/EOSHIFT: Rejects optional dummy for DIM=
- From: "jvdelisle at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 16 Nov 2007 06:23:35 -0000
- Subject: [Bug fortran/33317] CSHIFT/EOSHIFT: Rejects optional dummy for DIM=
- References: <bug-33317-13404@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #4 from jvdelisle at gcc dot gnu dot org 2007-11-16 06:23 -------
program test
implicit none
call sub(1)
call sub()
contains
subroutine sub(dimmy)
integer, optional :: dimmy
logical :: lotto(4)
lotto = .false.
lotto = cshift((/.true.,.true.,.true.,.true./),1,dimmy)
print *, lotto
end subroutine
end program test
After enabling the optional argument with -m32 -fdump-tree-original we get:
sub (dimmy)
{
logical4 lotto[4];
(void) __builtin_memset ((void *) &lotto, 0, 16);
{
int4 * D.515;
static int4 C.514 = 1;
struct array1_logical4 parm.2;
static logical4 A.1[4] = {1, 1, 1, 1};
struct array1_logical4 parm.0;
parm.0.dtype = 273;
parm.0.dim[0].lbound = 1;
parm.0.dim[0].ubound = 4;
parm.0.dim[0].stride = 1;
parm.0.data = (void *) &lotto[0];
parm.0.offset = -1;
parm.2.dtype = 273;
parm.2.dim[0].lbound = 1;
parm.2.dim[0].ubound = 4;
parm.2.dim[0].stride = 1;
parm.2.data = (void *) &A.1[0];
parm.2.offset = 0;
D.515 = dimmy != 0B ? dimmy : 0B;
_gfortran_cshift0_4 (&parm.0, &parm.2, &C.514, D.515);
}
and it works as expected.
With -m64 it obviously fails with the following:
sub (dimmy)
{
logical4 lotto[4];
(void) __builtin_memset ((void *) &lotto, 0, 16);
{
int4 D.874;
static int4 C.873 = 1;
struct array1_logical4 parm.2;
static logical4 A.1[4] = {1, 1, 1, 1};
struct array1_logical4 parm.0;
parm.0.dtype = 273;
parm.0.dim[0].lbound = 1;
parm.0.dim[0].ubound = 4;
parm.0.dim[0].stride = 1;
parm.0.data = (void *) &lotto[0];
parm.0.offset = -1;
parm.2.dtype = 273;
parm.2.dim[0].lbound = 1;
parm.2.dim[0].ubound = 4;
parm.2.dim[0].stride = 1;
parm.2.data = (void *) &A.1[0];
parm.2.offset = 0;
D.874 = *dimmy;
_gfortran_cshift0_4 (&parm.0, &parm.2, &C.873, &D.874);
}
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33317