checker: fix `&` on pointers (#6787)
parent
baf2ff1a91
commit
bb91dc90a5
|
@ -2856,6 +2856,8 @@ pub fn (mut c Checker) expr(node ast.Expr) table.Type {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return right_type.to_ptr()
|
return right_type.to_ptr()
|
||||||
|
} else if node.op == .amp && node.right !is ast.CastExpr {
|
||||||
|
return right_type.to_ptr()
|
||||||
}
|
}
|
||||||
if node.op == .mul {
|
if node.op == .mul {
|
||||||
if right_type.is_ptr() {
|
if right_type.is_ptr() {
|
||||||
|
|
|
@ -14,6 +14,26 @@ fn test_ptr_assign() {
|
||||||
assert v[3] == 31
|
assert v[3] == 31
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn test_double_ptr() {
|
||||||
|
i := 5
|
||||||
|
j := 7
|
||||||
|
unsafe {
|
||||||
|
mut x := &i
|
||||||
|
mut p := &x
|
||||||
|
(*p) = &j
|
||||||
|
assert x == &j
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////
|
||||||
|
|
||||||
|
mut x := &int(0)
|
||||||
|
unsafe {
|
||||||
|
mut p := &x
|
||||||
|
(*p) = &int(1)
|
||||||
|
}
|
||||||
|
assert ptr_str(x) == ptr_str(&int(1))
|
||||||
|
}
|
||||||
|
|
||||||
fn test_ptr_infix() {
|
fn test_ptr_infix() {
|
||||||
v := 4
|
v := 4
|
||||||
mut q := unsafe {&v - 1}
|
mut q := unsafe {&v - 1}
|
||||||
|
|
Loading…
Reference in New Issue