dereferencing type-punned pointer will break strict-aliasing rules 경고와 관련해 질문이 있습니다

i20749의 이미지

안녕하세요. 개발 중에 dereferencing type-punned pointer will break strict-aliasing rules 경고와

관련해 궁금한 점이 있습니다. 영어로된 검색 내용은 봐도 이해가 잘 안되서요. 선배님들의 가르침 부탁드리겠습니다.

소스는 다음과 같습니다.

void my_free(void **ptr)
{
if (*ptr != NULL) {
free(*ptr);
*ptr = NULL;
}
}

int main()
{
char *ptr;

ptr = malloc(10);

my_free((void **) &ptr);
}

컴파일 옵션은 다음과 같구요.

g++ -O2 -Wall -o test test.c

현재 centos 6.0 x86에서는 아무 경고도 나오지 않는데요, centos 5.7 x64에서는

dereferencing type-punned pointer will break strict-aliasing rules 경고가 나타나고 있습니다.

centos 5.7 x64에서 -O2 옵션을 제거하면 나타나지 않구요.

위 경고를 무시하면 안될거 같은데 예제 소스가 무엇때문에 문제가 있는지 잘 이해가 되지 않습니다.