The following code running compiler options -O3 vs -O0 results different output:
#include <stdlib.h>
#include <stdio.h>
int main(){
   int *p = (int*)malloc(sizeof(int));    
   int *q = (int*)realloc(p, sizeof(int));
   *p = 1;
   *q = 2;
   if (p == q)
     printf("%d %d", *p, *q);
   return 0;
}
I was very surprised with the outcome.
Compiling with clang 3.4, 3.5 (http://goo.gl/sDLvrq)
- using compiler options - -O0— output: 2 2
- using compiler options - -O3— output: 1 2
Is it a bug?
Interestingly if I modify the code slightly (http://goo.gl/QwrozF) it behaves as expected.
int *p = (int*)malloc(sizeof(int));    
*p = 1;
Testing it on gcc seems to work fine.
 
     
     
    