checker: prevent enum value duplication check bypass (#10287)
							parent
							
								
									e54af19b25
								
							
						
					
					
						commit
						dc431a3c47
					
				|  | @ -3208,6 +3208,8 @@ pub fn (mut c Checker) enum_decl(decl ast.EnumDecl) { | ||||||
| 				last := seen[seen.len - 1] | 				last := seen[seen.len - 1] | ||||||
| 				if last == checker.int_max { | 				if last == checker.int_max { | ||||||
| 					c.error('enum value overflows', field.pos) | 					c.error('enum value overflows', field.pos) | ||||||
|  | 				} else if !decl.is_multi_allowed && last + 1 in seen { | ||||||
|  | 					c.error('enum value `${last + 1}` already exists', field.pos) | ||||||
| 				} | 				} | ||||||
| 				seen << last + 1 | 				seen << last + 1 | ||||||
| 			} else { | 			} else { | ||||||
|  |  | ||||||
|  | @ -1,11 +1,11 @@ | ||||||
| vlib/v/checker/tests/enum_field_value_duplicate_err.vv:3:10: error: enum value `0` already exists | vlib/v/checker/tests/enum_field_value_duplicate_a.vv:3:10: error: enum value `0` already exists | ||||||
|     1 | enum Color { |     1 | enum Color { | ||||||
|     2 |     red |     2 |     red | ||||||
|     3 |     green = 0 |     3 |     green = 0 | ||||||
|       |             ^ |       |             ^ | ||||||
|     4 |     blue  = 1 |     4 |     blue  = 1 | ||||||
|     5 |     alpha = 1 |     5 |     alpha = 1 | ||||||
| vlib/v/checker/tests/enum_field_value_duplicate_err.vv:5:10: error: enum value `1` already exists | vlib/v/checker/tests/enum_field_value_duplicate_a.vv:5:10: error: enum value `1` already exists | ||||||
|     3 |     green = 0 |     3 |     green = 0 | ||||||
|     4 |     blue  = 1 |     4 |     blue  = 1 | ||||||
|     5 |     alpha = 1 |     5 |     alpha = 1 | ||||||
|  | @ -0,0 +1,6 @@ | ||||||
|  | vlib/v/checker/tests/enum_field_value_duplicate_b.vv:4:2: error: enum value `0` already exists | ||||||
|  |     2 |     red // 0 | ||||||
|  |     3 |     green = -1 | ||||||
|  |     4 |     blue // -1 + 1 = 0 | ||||||
|  |       |     ~~~~ | ||||||
|  |     5 | } | ||||||
|  | @ -0,0 +1,5 @@ | ||||||
|  | enum Color { | ||||||
|  | 	red // 0
 | ||||||
|  | 	green = -1 | ||||||
|  | 	blue // -1 + 1 = 0
 | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue