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]

Reply via email to