Please compile the following program by any of gcc version 3 and by gcc version 2.95, and run the program as follows.
% gcc-3.3 -g -O0 -Wall this_program.c -o program_compiled_by_3.3 % program_compiled_by_3.3 First access loop-C 1422606 = &C[0][0][0][1][0] - &C0[0][0][0][1][0] loop-C 1422606 = &C[0][0][0][1][1] - &C0[0][0][0][1][1] ... loop-B -134217962 = &C[0][1][0][0][2] - &C0[0][1][0][0][2] Second access % % gcc-2.95 -g -O0 -Wall this_program.c -o program_compiled_by_2.95 % program_compiled_by_2.95 First access Second access % If the program is compiled by gcc version 3, the program will outpur error messages which tell us that &C[i][j][k][l][m] is not equal to &C0[i][j][k][l][m], but if gcc version 2.95 is used, no such errors will occur; of course after C = C0 is excuted. Does this indicate a bug in the Gcc version 3 or in my program? =============== # Please compile the following program by # % gcc-3.3 -g -O0 this_program.c -o program_compiled_by_3.3 # % program_compiled_by_3.3 # First access # loop-C 1422606 = &C[0][0][0][1][0] - &C0[0][0][0][1][0] # ... # Second access # % gcc-2.95 -g -O0 this_program.c -o program_compiled_by_2.95 # % program_compiled_by_2.95 # First access # Second access #include <stdio.h> #define LPMAX 1 #define LEMAX 1 #define KEMAX 1 int main(void) { int lpmax = LPMAX; int lemax = LEMAX; int kemax = KEMAX; int lp, mp, le, me, ke; int kePkemax; int status = 0; int i; double C0[lpmax + 1][lpmax + 1][lemax + 1][lemax + 1][kemax * 2 + 1]; double (*C)[lpmax + 1][lemax + 1][lemax + 1][kemax * 2 + 1]; C = C0; fprintf(stderr,"First access\n"); for ( lp = 0; lp <= lpmax; lp++ ) { for ( mp = -lp; mp < 0; mp++ ) { for ( le = 0; le <= lemax; le++ ) { for ( me = -le; me < 0; me++ ) { for ( ke = -kemax; ke <= kemax; ke++ ) { kePkemax = ke + kemax; i = &C[lp + mp][lp][le + me][le][kePkemax] - &C0[lp + mp][lp][le + me][le][kePkemax]; #ifndef DEBUG if ( i != 0 ) #endif fprintf(stderr,"loop-A %d = &C[%d][%d][%d][%d][%d] - &C0[%d][%d][%d][%d][%d] \n", i, lp + mp, lp, le + me, le, kePkemax, lp + mp, lp, le + me, le, kePkemax); } } for ( me = 0; me <= le; me++ ) { for ( ke = -kemax; ke <= kemax; ke++ ) { kePkemax = ke + kemax; i = &C[lp + mp][lp][le][le - me][kePkemax] - &C0[lp + mp][lp][le][le - me][kePkemax]; #ifndef DEBUG if ( i != 0 ) #endif fprintf(stderr,"loop-B %d = &C[%d][%d][%d][%d][%d] - &C0[%d][%d][%d][%d][%d] \n", i, lp + mp, lp, le, le - me, kePkemax, lp + mp, lp, le, le - me, kePkemax); } } } } for ( mp = 0; mp <= lp; mp++ ) { for ( le = 0; le <= lemax; le++ ) { for ( me = -le; me < 0; me++ ) { for ( ke = -kemax; ke <= kemax; ke++ ) { kePkemax = ke + kemax; i = &C[lp][lp - mp][le + me][le][kePkemax] - &C0[lp][lp - mp][le + me][le][kePkemax]; #ifndef DEBUG if ( i != 0 ) #endif fprintf(stderr,"loop-C %d = &C[%d][%d][%d][%d][%d] - &C0[%d][%d][%d][%d][%d] \n", i, lp, lp - mp, le + me, le, kePkemax, lp, lp - mp, le + me, le, kePkemax); } } for ( me = 0; me <= le; me++ ) { for ( ke = -kemax; ke <= kemax; ke++ ) { kePkemax = ke + kemax; i = &C[lp][lp - mp][le][le - me][kePkemax] - &C0[lp][lp - mp][le][le - me][kePkemax]; #ifndef DEBUG if ( i != 0 ) #endif fprintf(stderr,"loop-D %d = &C[%d][%d][%d][%d][%d] - &C0[%d][%d][%d][%d][%d] \n", i, lp, lp - mp, le, le - me, kePkemax, lp, lp - mp, le, le - me, kePkemax); } } } } } fprintf(stderr,"Second access\n"); for ( lp = 0; lp <= lpmax; lp++ ) { for ( mp = 0; mp <= lpmax; mp++ ) { for ( le = 0; le <= lemax; le++ ) { for ( me = 0; me <= lemax; me++ ) { for ( ke = 0; ke <= kemax * 2; ke++ ) { { int i; i = &C[lp][mp][le][me][ke] - &C0[lp][mp][le][me][ke]; #ifndef DEBUG if ( i != 0 ) #endif fprintf(stderr,"loop %d = &C[%d][%d][%d][%d][%d] - &C0[%d][%d][%d][%d][%d] \n", i, lp, mp, le, me, ke, lp, mp, le, me, ke); } } } } } } return(status); } -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]