checker: add error for amp on literals (#6467)
							parent
							
								
									47a62b12d4
								
							
						
					
					
						commit
						e384dea8ac
					
				|  | @ -2670,6 +2670,12 @@ pub fn (mut c Checker) expr(node ast.Expr) table.Type { | |||
| 			node.right_type = right_type | ||||
| 			// TODO: testing ref/deref strategy
 | ||||
| 			if node.op == .amp && !right_type.is_ptr() { | ||||
| 				if node.right is ast.IntegerLiteral { | ||||
| 					c.error('cannot take the address of an int', node.pos) | ||||
| 				} | ||||
| 				if node.right is ast.StringLiteral || node.right is ast.StringInterLiteral { | ||||
| 					c.error('cannot take the address of a string', node.pos) | ||||
| 				} | ||||
| 				return right_type.to_ptr() | ||||
| 			} | ||||
| 			if node.op == .mul { | ||||
|  | @ -2678,7 +2684,7 @@ pub fn (mut c Checker) expr(node ast.Expr) table.Type { | |||
| 				} | ||||
| 				if !right_type.is_pointer() { | ||||
| 					s := c.table.type_to_str(right_type) | ||||
| 					c.error('prefix operator `*` not defined for type `$s`', node.pos) | ||||
| 					c.error('invalid indirect of `$s`', node.pos) | ||||
| 				} | ||||
| 			} | ||||
| 			if node.op == .bit_not && !right_type.is_int() && !c.pref.translated { | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| vlib/v/checker/tests/prefix_err.vv:2:5: error: prefix operator `*` not defined for type `int` | ||||
| vlib/v/checker/tests/prefix_err.vv:2:5: error: invalid indirect of `int` | ||||
|     1 | a := 1 | ||||
|     2 | _ = *a | ||||
|       |     ^ | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue