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.
Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
Log in with Google account
No account? Register here.