snu-sf-class / swpp202401

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

[Project] Backend miscompilation: casting GEP index #139

Open sbkim28 opened 6 months ago

sbkim28 commented 6 months ago

안녕하세요, 백엔드에서 miscompilation이 일어나는 것 같아서 이를 제보하고자 합니다.

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

define dso_local i32 @main() #0 {
entry:
  %ptr = call noalias ptr @malloc(i64 noundef 16)
  %ptr0 = getelementptr inbounds i64, ptr %ptr, i32 1
  %ptr1 = getelementptr inbounds i64, ptr %ptr0, i32 -1
  store i64 1, ptr %ptr1, align 8
  %0 = load i64, ptr %ptr, align 8
  call void @write(i64 noundef %0)
  ret i32 0
}

해당 코드를 컴파일 후 실행하면 다음과 같은 오류를 얻습니다. Error occurs while trying to access adress 34359943168 : line 12

backend의 gep_eliminate.cpp에서 index를 unsigned로 처리해서 문제가 생기는 것 같은데, 관련해서 해당 문제를 확인해주셨으면 합니다.

감사합니다.

strikef commented 5 months ago

GEP의 인덱스가 음수일 때를 상정하지 않아서 발생한 오류입니다. 백엔드 버그가 맞으며, 수정 예정입니다.