package: gcc version: 2.95.4-0.01042 running on intel based system (old pentium 133Mhz)
first dpkg --list | grep gcc yeilds ii gcc 2.95.3-7 The GNU C compiler. ii gcc-2.95 2.95.4-0.01042 The GNU C compiler. I'm not 100% sure why my system thinks both "gcc" and "gcc-2.95" are installed. Suggestions on how to fix this would be appreciated. I upgraded from a "stable" debian release to "testing" a month or so ago. The command gcc --version yields gcc version 2.95.4 20010319 (Debian prerelease) so I really think "gcc-2.95" is installed but I'll do any other verification needed. >From a really bad piece of code I was looking at that had a bug in the code, leads me to believe there is also a compiler bug. { int arr[10][10], x, y; for (x = 0; x < 10; x++) { for (y = 0; y < 10; y++) { arr[x][y] = ((x = y) ? 1 : 0); printf("%d\n", arr[x][y]); } } } Don't ask where the code comes from, its not mine. The bug in the code is the "(x = y)" was susppose to be "(x == y)". But theoretically with the bug still in place I would expect arr[0][0], arr[1][1], ..., arr[9][9] to be the only elements filled in and arr[0][0] will contain 0 and the other arr[i][i] would contain 1. I tossed in the printf() to show what is happenning. compiled with "gcc T.c -o T" the output is 0 179931522 -1073745196 1073914572 126767887 1073833580 0 1073833240 1074870958 -1073744904 (the "funky numbers" are just values on the stack that are in the positions for arr[i][i]) where I would have expected 0 1 1 1 1 1 1 1 1 1 Just for giggles, if one changes arr[10][10], to arr[10][10] = { { 10 } }, the output is 0 0 0 0 0 0 0 0 0 0 which enforces my suspecition that for i > 0 arr[i][i] is _NOT_ being written/stored to. Its unclear whether arr[0][0] is being stored or not from the above output. I recompiled as "gcc -g3 T.c -o T" and the output remains consistent but here's the assembly language statements if that helps. I'm really not up on my x86 assembly anymore so I won't make any comments on it. 0x8048828 <t33>: push %ebp 0x8048829 <t33+1>: mov %esp,%ebp 0x804882b <t33+3>: sub $0x1a4,%esp 0x8048831 <t33+9>: push %ebx 0x8048832 <t33+10>: nop 0x8048833 <t33+11>: movl $0x0,0xfffffe6c(%ebp) 0x804883d <t33+21>: lea 0x0(%esi),%esi 0x8048840 <t33+24>: cmpl $0x9,0xfffffe6c(%ebp) 0x8048847 <t33+31>: jle 0x8048850 <t33+40> 0x8048849 <t33+33>: jmp 0x8048910 <t33+232> 0x804884e <t33+38>: mov %esi,%esi 0x8048850 <t33+40>: movl $0x0,0xfffffe68(%ebp) 0x804885a <t33+50>: lea 0x0(%esi),%esi 0x8048860 <t33+56>: cmpl $0x9,0xfffffe68(%ebp) 0x8048867 <t33+63>: jle 0x8048870 <t33+72> 0x8048869 <t33+65>: jmp 0x8048900 <t33+216> 0x804886e <t33+70>: mov %esi,%esi 0x8048870 <t33+72>: mov 0xfffffe68(%ebp),%eax 0x8048876 <t33+78>: mov %eax,%edx 0x8048878 <t33+80>: lea 0x0(,%edx,4),%eax 0x804887f <t33+87>: mov 0xfffffe6c(%ebp),%ecx 0x8048885 <t33+93>: mov %ecx,%edx 0x8048887 <t33+95>: shl $0x2,%edx 0x804888a <t33+98>: add %ecx,%edx 0x804888c <t33+100>: lea 0x0(,%edx,8),%ecx 0x8048893 <t33+107>: add %ecx,%eax 0x8048895 <t33+109>: lea 0xfffffe70(%ebp),%edx 0x804889b <t33+115>: mov 0xfffffe68(%ebp),%ecx 0x80488a1 <t33+121>: mov %ecx,0xfffffe6c(%ebp) 0x80488a7 <t33+127>: test %ecx,%ecx 0x80488a9 <t33+129>: setne %cl 0x80488ac <t33+132>: movzbl %cl,%ebx 0x80488af <t33+135>: mov %ebx,(%eax,%edx,1) 0x80488b2 <t33+138>: add $0xfffffff8,%esp 0x80488b5 <t33+141>: mov 0xfffffe68(%ebp),%eax 0x80488bb <t33+147>: mov %eax,%edx 0x80488bd <t33+149>: lea 0x0(,%edx,4),%eax 0x80488c4 <t33+156>: mov 0xfffffe6c(%ebp),%ecx 0x80488ca <t33+162>: mov %ecx,%edx 0x80488cc <t33+164>: shl $0x2,%edx 0x80488cf <t33+167>: add %ecx,%edx 0x80488d1 <t33+169>: lea 0x0(,%edx,8),%ecx 0x80488d8 <t33+176>: add %ecx,%eax 0x80488da <t33+178>: lea 0xfffffe70(%ebp),%edx 0x80488e0 <t33+184>: mov (%eax,%edx,1),%eax 0x80488e3 <t33+187>: push %eax 0x80488e4 <t33+188>: push $0x80489d4 0x80488e9 <t33+193>: call 0x8048434 <printf> 0x80488ee <t33+198>: add $0x10,%esp 0x80488f1 <t33+201>: incl 0xfffffe68(%ebp) 0x80488f7 <t33+207>: jmp 0x8048860 <t33+56> 0x80488fc <t33+212>: lea 0x0(%esi,1),%esi 0x8048900 <t33+216>: incl 0xfffffe6c(%ebp) 0x8048906 <t33+222>: jmp 0x8048840 <t33+24> 0x804890b <t33+227>: nop 0x804890c <t33+228>: lea 0x0(%esi,1),%esi 0x8048910 <t33+232>: add $0xfffffff8,%esp 0x8048913 <t33+235>: mov 0xfffffe9c(%ebp),%eax 0x8048919 <t33+241>: push %eax 0x804891a <t33+242>: push $0x80489d4 0x804891f <t33+247>: call 0x8048434 <printf> 0x8048924 <t33+252>: add $0x10,%esp 0x8048927 <t33+255>: mov 0xfffffe58(%ebp),%ebx 0x804892d <t33+261>: leave 0x804892e <t33+262>: ret 0x804892f <t33+263>: nop Have fun. If you need anymore information, please feel free to email.