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]

Re: (Re)allocation of allocatable arrays on assignment - F2003


Dear Paul,

Paul Richard Thomas wrote:
b) The test case fails for me for:

if (any (b .ne. a)) call abort

as "a(10)" == 0 while "b(10)" == -134744073.
That is very mysterious.

I think something is fishy about the following:


        D.1547 = a.dim[0].lbound;
        D.1548 = a.dim[0].ubound;
        {
          D.1548 = a.dim[0].ubound - a.dim[0].lbound;
              b.data = (void * restrict) __builtin_malloc (D.1555 * 4);
        }
          S.2 = D.1547;
          while (1)
            {
              if (S.2 > D.1548) goto L.2;

The loop should be:
          S.2 = a.lbound;
          while (1)
            {
              if (S.2 > a.ubound) goto L.2;
but it effectively is
          S.2 = a.lbound;
          while (1)
            {
              if (S.2 > (a.ubound-a.lbound)) goto L.2;

Which for lbound == 1 misses the last element - which happens to be "0" in your case. Zero is a bad choice as memory is often initialized to zero ...

f) The following is valid Fortran 2008 (LHS polymorphic but allocatable),
invalid Fortran 2003 and currently rejected (LHS is polymorphic):
I'll do F2003 first.

That's fine - I was just checking whether it silently fails; fortunately, it is rejected at compile time and thus deferring does not even cause a wrong-code problem with F2008 code.


The most worrying of the above is the failure of
if (any (b .ne. a)) call abort
I don't quite know who to deal with that since it works for me.

I assume the reason is that the last element is "0" and your memory seems to be initialized by zero. I think one reason that I get more often non-zero values than you is that I set the following environment variables - in particular the first one:


export MALLOC_PERTURB_=$(($RANDOM % 255 + 1))
export MALLOC_CHECK_=2

Tobias


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