http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55770



             Bug #: 55770

           Summary: when compiling code with -fwhole-program and

                    -fipa-matrix-reorg,compiler will produce wrong code

    Classification: Unclassified

           Product: gcc

           Version: 4.7.1

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: c

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: hcj20080...@163.com





compiler version :gcc 4.7.1

--build=i586-suse-linux 

--host=i586-suse-linux

--target=i586-target-linux-gnu



test case test.c:



#include <string.h>



void __attribute__((noinline)) mem_init (void);

int **vel;

int *p;

int main (int argc, char **argv)

{

  int i, j, k;

  mem_init();

  p=malloc(4);

  *p=123;

 printf("p1:%d\n",*p);

  return 0;

}



void __attribute__((noinline))

mem_init (void)

{



  int i, j, k,d;



  d = 0;

  vel = (int **) malloc(2*sizeof(int *));

  for(i=0;i<2;i++)

    vel[i]=(int *)malloc(4*sizeof(int));

  for(i=0;i<2;i++)

        for(j=0;j<4;j++)

      vel[i][j]=i+j;



}





with command compile code

i586-target-linux-gnu-gcc test.c   -fno-ipa-matrix-reorg -fdump-tree-optimized 

-O3 -fwhole-program -fno-tree-fre -lm -S -o test-2.s



i586-target-linux-gnu-gcc test-2.s -o test-2.exe





assembling file test-2.s content following:



mem_init:

.LFB34:

    subl    $28, %esp

    movl    $8, (%esp)

    movl    $16, T.6

    movl    $32, T.7

    call    malloc # get 8 byte in the heap space 

    movl    %eax, vel

    movl    $0, (%eax)

    movl    $1, 4(%eax)

    movl    $2, 8(%eax)

    movl    $3, 12(%eax)

    movl    $1, 16(%eax)

    movl    $2, 20(%eax)

    movl    $3, 24(%eax)

    movl    $4, 28(%eax)# wring 32 byte date to the heap space

    addl    $28, %esp

    .cfi_def_cfa_offset 4

    ret

    .cfi_endproc



run the test-2.exe , give error  infomation

test-1.exe: malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr)

(((char *) &((av)->bins[((1) - 1) * 2])) - _0x1) && ((unsigned long)old_end &

pagemask) == 0)' failed.

Aborted

Reply via email to