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
 | 
															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 {
 | 
												ast.GlobalField {
 | 
				
			||||||
								left.obj.typ = left_type
 | 
													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