Search Results for 'g++'

ATOM Icon

1 POSTS

  1. 2009/02/22 g++의 버그 by 안영기 (2)

g++의 버그

프로그램 개발자는 컴파일러를 의심하면 안된다. 제일 먼저 자신 탓을 하고, 하드웨어의 특성을 의심하고, 그것도 문제가 아니라면 그 때야 컴파일러를 의심해 보아야 한다.

그런데 수 많은 버그들과 씨름하다보면 가끔씩 컴파일러를 의심해야 할 때도 있다. 특히 변방의 열악한 컴파일러라면 그런 일이 좀 많긴하다. 그런데 이번에는 g++에 대해서 이야기 하고자 한다.

소스

#include <stdio.h>

int main()
{
unsigned char buffer[2] = {0, 0};
unsigned char* pByte = buffer;

*pByte = 1 + *pByte++;

printf("%d, %d\n", buffer[0], buffer[1]);

return 0;
}

이것의 결과는 어떨까. 나는 2개의 g++ 버전으로 테스트를 해보았다.

g++ 4.0.1의 결과

% g++ --version
g++ (GCC) 4.0.1 (Debian 4.0.1-2)
Copyright (C) 2005 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

% g++ q.cpp
% ./a.out
1, 0
% g++ q.cpp -O3
% ./a.out
1, 0

g++ 3.4.4의 결과

$ g++ --version
g++ (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++ q.cpp
$ ./a.exe
1, 0
$ g++ q.cpp -O3
$ ./a.exe
0, 1

확실히 뭔가 이상하다. 4번의 실행 결과는 모두 같아야 하는데 마지막 하나는 결과가 다르다. x86과 MIPS와 ARM의 컴파일러가 서로 결과가 다른 것은 그나마 자주 있는 일인데, 같은 x86인데도 불구하고  동일 컴파일러인데도 버전이 달라지면서 결과가 달라진다든지 최적화 옵션에 따라 결과가 달라진다든지 해서는 안될 것이다.

이 문제가 컴파일러를 만든 쪽에 보고가 된 것인지 아닌지는 알 수가 없지만, 하여간 나는 이 문제 때문에 며칠을 날려 먹었던 것이다. (x86 vs. ARM의 경우에는 컴파일러 특성으로 결과가 달라지는 것은 굉장히 흔한 경우이다. 다음 기회에 이것도 한 번 다루겠다.)

Posted by 안영기

2009/02/22 23:22 2009/02/22 23:22
Response
0 Trackbacks , 2 Comments
RSS :
http://smgal.ismine.net/tc_191/blog1/rss/response/7

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다


블로그 이미지

게임 개발을 기반으로 한, 잡다한 개발 기록 저장소

- 안영기

Notices

Archives

Authors

  1. 안영기

Recent Comments

Recent Trackbacks

Calendar

«   2024/11   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Site Stats

Total hits:
250061
Today:
35
Yesterday:
37