This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tree-optimization/56661] New: [4.8 regression] Incorrect code with -O1 -ftree-pre


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

             Bug #: 56661
           Summary: [4.8 regression] Incorrect code with -O1 -ftree-pre
    Classification: Unclassified
           Product: gcc
           Version: 4.8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: manisandro@gmail.com


Using gcc version 4.8.0 20130316 (Red Hat 4.8.0-0.17)

----------------- main.c -----------------
typedef long unsigned int size_t;
extern int printf (const char *__restrict __format, ...);
extern void *malloc (size_t __size) __attribute__ ((__nothrow__ , __leaf__))
__attribute__ ((__malloc__));

void setb(int* b);

void foo(int x){
    if(x == 0){
        int* b = malloc(3*sizeof(int));
        while(b[0]);
    }else if(x == 1){
        int i, j;
        int* b = malloc(3*sizeof(int));
        for(i = 0; i < 2; i++){
            setb(b);
            for(j = 0; j < 3; ++j){
                printf("%d ", b[j]);
            }
            printf("\nb[0] = %d\n", b[0]);
        }
    }
}

extern int g_x;

int main(){
    foo(g_x);
    return 0;
}

----------------- stuff.c -----------------
void setb(int* b){
    b[0] = b[1] = b[2] = 1;
}

int g_x = 1;

-------------------------------------------

$ gcc -O1 -ftree-pre -o test main.c stuff.c
$ ./test
1 1 1 
b[0] = 0
1 1 1 
b[0] = 0

Works with gcc version 4.7.2 20121109 (Red Hat 4.7.2-8)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]