snu-sf-class / swpp202401

Principles and Practices of Software Development Main Repository
14 stars 4 forks source link

[Project] Skeleton Compiler miscompilation #83

Open sbkim28 opened 6 months ago

sbkim28 commented 6 months ago

안녕하세요, skeleton compiler에서 miscompilation이 발생하는 것 같아 제보하고자 합니다.

다음은 제가 임의로 작성한 c 코드입니다.

#include <stdint.h>
#include <stdlib.h>

int64_t read();
void write(int64_t);

int main() {
  int64_t v[12800];
  int64_t* w = v;
  w[0] = 1;
  if (w != NULL) {
    write(w[0]);
  } else {
    write(0);
  }
}

해당 코드에서, w는 NULL이 아니므로 1을 출력해야 합니다. 그러나 해당 코드를 skeleton compiler를 이용해서 compile하면, 그 출력 결과는 0이 나옵니다. v가 사용하는 메모리 공간이 102400byte로, 의 주소값이 0으로 NULL 값과 동일하여 발생하는 문제인 것 같습니다.

실제로, 저렇게 극단적으로 stack memory를 사용하는 코드는 입력으로 들어오지 않는다고 하였지만, 최적화 과정에서 stack memory를 추가적으로 사용할 때 저런 문제가 발생할 수도 있을 것 같아서 제보 드립니다.

감사합니다.

strikef commented 6 months ago

말씀하신 대로 절대로 일반적인 상황은 아니나, C 표준상으로 지원해야 하는 코드이므로 수정 예정입니다. 표준에 정확히 부합하는 구현을 논의중이어서 정확한 변경사항은 업데이트 배포 시에 말씀드릴 수 있을 것 같습니다.

strikef commented 6 months ago

5/14일자 백엔드 패치에서 수정되었습니다.