Nullable pointer and loop inlining tests. #22

Closed
peony wants to merge 7 commits from peony/holey-bytes:trunk into trunk
3 changed files with 24 additions and 5 deletions
Showing only changes of commit 191c49ff1d - Show all commits

View file

@ -1059,16 +1059,21 @@ main := fn(): uint {
#### null_check_test
```hb
main := fn(): uint {
ptr := @as(?^uint, null)
get_ptr := fn(): ?^uint {
value := 0
ptr = &value
if ptr == null {
return 1
return &value
}
return *ptr
main := fn(): void {
ptr := get_ptr()
if ptr == null {
return
}
loop {
*ptr += 1
}
}
```

View file

@ -0,0 +1,8 @@
main:
LRA r2, r0, :x
LI64 r1, 0d
ST r1, r2, 0a, 8h
JALA r0, r31, 0a
code size: 57
ret: 0
status: Ok(())

View file

@ -0,0 +1,6 @@
test.hb:15:4: can't prove the value is not 'null', use '@unwrap(<opt>)' if you believe compiler is stupid, or explicitly check for null and handle it ('if <opt> == null { /* handle */ } else { /* use opt */ }')
*ptr += 1
^
test.hb:15:4: can't prove the value is not 'null', use '@unwrap(<opt>)' if you believe compiler is stupid, or explicitly check for null and handle it ('if <opt> == null { /* handle */ } else { /* use opt */ }')
*ptr += 1
^