checker: fix negative values for unsigned integers (#10976)
							parent
							
								
									6fa8e4269e
								
							
						
					
					
						commit
						7c504920e1
					
				|  | @ -3949,6 +3949,14 @@ pub fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) { | |||
| 										left.obj.is_auto_heap = true | ||||
| 									} | ||||
| 								} | ||||
| 								if left_type in ast.unsigned_integer_type_idxs { | ||||
| 									if right is ast.IntegerLiteral { | ||||
| 										if right.val[0] == `-` { | ||||
| 											c.error('Cannot assign negative value to unsigned integer type', | ||||
| 												right.pos) | ||||
| 										} | ||||
| 									} | ||||
| 								} | ||||
| 							} | ||||
| 							ast.GlobalField { | ||||
| 								left.obj.typ = left_type | ||||
|  |  | |||
|  | @ -0,0 +1,7 @@ | |||
| vlib/v/checker/tests/negative_assign_to_unsigned.vv:3:9: error: Cannot assign negative value to unsigned integer type | ||||
|     1 | fn main() { | ||||
|     2 |     mut u := u32(10) | ||||
|     3 |     u = -10 | ||||
|       |         ~~~ | ||||
|     4 |     eprintln(u) | ||||
|     5 | } | ||||
|  | @ -0,0 +1,5 @@ | |||
| fn main() { | ||||
|     mut u := u32(10) | ||||
|     u = -10 | ||||
|     eprintln(u) | ||||
| } | ||||
		Loading…
	
		Reference in New Issue