Made sure null_check_test reproduces exact issue.

This commit is contained in:
peony 2024-11-03 15:58:42 +01:00
parent d4a52b6342
commit 191c49ff1d
3 changed files with 24 additions and 5 deletions

View file

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