Nullable pointer and loop inlining tests. #22
|
@ -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
|
||||
return &value
|
||||
}
|
||||
|
||||
main := fn(): void {
|
||||
ptr := get_ptr()
|
||||
|
||||
if ptr == null {
|
||||
return 1
|
||||
return
|
||||
}
|
||||
|
||||
return *ptr
|
||||
loop {
|
||||
*ptr += 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
|
|
@ -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(())
|
|
@ -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
|
||||
^
|
Loading…
Reference in a new issue