snu-sf-class / swpp202401

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

[Project] Miscompilation of signed negative int casting. #62

Open sbkim28 opened 6 months ago

sbkim28 commented 6 months ago

안녕하세요, 테스트 도중에 signed int가 negative 값을 가질 때, casting과 관련하여 miscompilation이 발생하는 것 같아서 제보하고자 합니다.

다음은 c로 작성한 테스트 케이스입니다.

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

int64_t read();
void write(int64_t);

int main() {
  int N = read();
  write(N - 10);
}

그런데, 해당 c 파일을 skeleton compiler을 이용해서 컴파일 한 이후, 입력으로 N=9를 넣으면 다음과 같은 출력이 나옵니다. 이는 비슷한 문제인 #48 을 수정한 interpreter로 실행한 결과임을 말씀드립니다.

Output:
18446744073709551611

그래서 해당 문제를 확인해주셨으면 합니다. 감사합니다.

strikef commented 6 months ago

image

해당 문제는 조교의 환경에선 재현이 안 되고 있습니다. 혹시 앞에 다른 최적화 패스가 적용되었나요?

sbkim28 commented 6 months ago

아 제가 다른 input에 대한 출력을 가져다 썼습니다. 혼동을 드려서 죄송합니다.

이와 별개로, write(-1)을 했을 때 18446744073709551615로 unsigned 값으로 출력되는게 의도된 동작인가요? write가 signed int를 입력으로 받아서 출력도 signed 값인 -1을 출력해야 한다고 생각해서 제보하였습니다.

strikef commented 6 months ago

네, 인터프리터는 모든 값을 unsigned로 처리하기 때문에 입출력 또한 unsigned로 처리합니다. 실제로 예시 프로그램에 같이 제공된 input-output pair에도 음수가 존재하지 않는 것을 확인하실 수 있습니다.