lower+backend: 배열, 경계검사, 구조체, 그리고 실행 테스트 스위트
인덱스는 부호 없는 비교와 트랩으로 펴진다. --no-checks 는 메시지가 아니라 비교와 분기 자체를 없앤다 -- 그게 그 플래그의 전부다. 버그 셋: - 값으로 넘긴 구조체 파라미터는 주소로 도착하는데 lowering 이 그걸 몰라서 포인터를 구조체로 읽었다. 변수마다 by_address 를 기록한다. - 덩어리 반환의 숨은 결과 인자를 지역이 아니라 임시값으로 다뤘다. - store 에 폭이 없어서 1바이트 bool 을 4바이트로 썼다. 옆 지역변수가 뭉개졌고 logic 프로그램이 틀린 답을 냈다. tests/exec.py 가 새 스위트다. run.py 는 컴파일러가 프로그램에 대해 뭐라고 하는지 보고, 이쪽은 프로그램이 실제로 무엇을 하는지 본다. 보고만 되고 방출되지 않는 경계검사는 저기서는 통과하고 여기서는 실패한다. run.py 194/194, exec.py 6/6.
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
// EXIT:55
|
||||
unit loopcall;
|
||||
|
||||
fn add(a: i32, b: i32) -> i32 { return a + b; }
|
||||
|
||||
fn main() -> i32 {
|
||||
var total: i32 = 0;
|
||||
var i: i32 = 0;
|
||||
while i < 10 {
|
||||
total = total + add(i, 1);
|
||||
i = i + 1;
|
||||
}
|
||||
return total;
|
||||
}
|
||||
Reference in New Issue
Block a user