[Bug fortran/67779] Strange ordering with strings in extended object
pault at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Dec 29 13:41:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67779
--- Comment #13 from Paul Thomas <pault at gcc dot gnu.org> ---
(In reply to Thomas Koenig from comment #11)
> Created attachment 37182 [details]
> More simplified test case
>
> This illustrates the problem - the array is passed wrong on
> the first call to the subroutine.
>
> Output:
>
> array on input
> 5 1 4 3 2
> array on input
> 1 4 3 2
> array on input
> 1 4 3
> array on input
> 1 4
> array on input
> 1
The call to quicksort from the main program generates:
class.15._vptr = (struct __vtype_myclass_def_Myclass * {ref-all})
&__vtab_myclass_def_Mysortable;
parm.16.dtype = 297;
parm.16.dim[0].lbound = 1;
parm.16.dim[0].ubound = 5;
parm.16.dim[0].stride = 1;
parm.16.data = (void *) &array[0];
parm.16.offset = -1;
class.15._data = parm.16;
quicksort (&class.15);
whereas the recursive call to self is:
parm.11.dim[0].lbound = 1;
parm.11.dim[0].ubound = D.3501;
parm.11.dim[0].stride = NON_LVALUE_EXPR <D.3503>;
parm.11.data = NON_LVALUE_EXPR <array->_data.data>;
parm.11.offset = 0;
class.12._data = VIEW_CONVERT_EXPR<struct array1_myclass>(parm.11);
class.12._vptr = array->_vptr;
quicksort (&class.12);
It is the offset being set to zero, rather than -1, that does the damage.
Paul
More information about the Gcc-bugs
mailing list