GCC bug ?

OP #1173645
Hi Everyone,

I have a bit of a problem with the arm-elf-gcc compiler (latest WinARM,
version 4.1.1, but also in previous versions) when I compile the
following code fragement:

typedef struct _block
{
  struct _block *nptr;
  int data[100];
}block;

void FreeBlocks(block *p)
{
  block *bptr,*fptr;

  bptr = p;
  fptr = p->nptr;

  for(;;)
  {
    if (bptr == (block *)NULL)
      break;

    free(bptr);
    bptr = fptr;
    fptr = bptr->nptr;
  }
  return;
}

Somehow the compiler 'optimizes' the bptr check to NULL out of the way
when I set the optimize flags to -Os. The resulting assembly code is :

6005016c <FreeBlocks>:
6005016c:  b510        push  {r4, lr}
6005016e:  6804        ldr  r4, [r0, #0]
60050170:  4b02        ldr  r3, [pc, #8]  (6005017c <PROGRAM+0x10>)
60050172:  f000 f823   bl  600501bc <PROGRAM+0x50>
60050176:  1c20        adds  r0, r4, #0
60050178:  6824        ldr  r4, [r4, #0]
6005017a:  e7f9        b.n  60050170 <_eappstart+0x4>
6005017c:  f3b8 6004   undefined


However, when I set the optimize flags to -O1, the code is compiled as
follows:
6005016c <FreeBlocks>:
6005016c:  b530        push  {r4, r5, lr}
6005016e:  6804        ldr  r4, [r0, #0]
60050170:  2800        cmp  r0, #0
60050172:  d008        beq.n  60050186 <_eappstart+0x1a>
60050174:  4d04        ldr  r5, [pc, #16]  (60050188 <PROGRAM+0x1c>)
60050176:  f000 f82a   bl  600501ce <PROGRAM+0x62>
6005017a:  6823        ldr  r3, [r4, #0]
6005017c:  1c20        adds  r0, r4, #0
6005017e:  2c00        cmp  r4, #0
60050180:  d001        beq.n  60050186 <_eappstart+0x1a>
60050182:  1c1c        adds  r4, r3, #0
60050184:  e7f7        b.n  60050176 <_eappstart+0xa>
60050186:  bd30        pop  {r4, r5, pc}
60050188:  f3b8 6004   undefined


It is clear to see that the second time, the compiler generates a cmp
r0,#0 instruction, and hence the program works as expected, but the
resulting code is a lot bigger.

So, my question is, do I do something wrong, or is this indeed a bug in
the compiler. In that case, where can I submit a bug report, or is there
an updated version of arm-gcc that I can use.

Any suggestions are welcome,
Kees.
Attached files:

Reply

A question of your own? This thread is over 18 years old. Ask it in a thread of its own – more people read along there, and it gets answered more often and sooner.

Start a new thread

A fix, an addition or feedback on this thread? Then reply here.

Formatting
  • [c]C-Code[/c]
  • [code]code in other languages, ASCII drawings[/code]
  • [math]formula (LaTeX syntax)[/math]
  • [[Title]] – link to an article
  • Link to another post: right-click its post ID (#8078628), copy the address, paste it into the text

More about formatting

Post long source code as an attachment, not in the text.

Already registered? Log in

Not shown to anyone. We send you a link; your post appears once you confirm it there.

By submitting you create a free account and accept the terms of use.