UBSan으로 C 미정의 동작 런타임에 잡기 — gcc·clang 실측 비교

정수 오버플로나 배열 범위 밖 접근처럼 C의 미정의 동작(undefined behavior)은 대개 크래시 없이 조용히 지나간다. 컴파일 경고로 잡히는 것은 상수로 접근하는 뻔한 경우뿐이고, 인덱스나 시프트 값이 런타임에 결정되면 경고가 나오지…

Continue ReadingUBSan으로 C 미정의 동작 런타임에 잡기 — gcc·clang 실측 비교

C언어 strict aliasing과 restrict — gcc/clang 최적화를 어셈블리로 확인하기

-O0에서 잘 돌던 코드가 -O2로 올리면 값이 달라진다. 디버거로 들여다보면 메모리에는 올바른 값이 들어 있는데 함수가 엉뚱한 값을 반환한다. 대개 범인은 두 가지다. 서로 다른 타입의 포인터로 같은 메모리를 건드리는…

Continue ReadingC언어 strict aliasing과 restrict — gcc/clang 최적화를 어셈블리로 확인하기