Skip to content

Commit b0779cc

Browse files
committed
driver: errors fix
1 parent d36d94a commit b0779cc

3 files changed

Lines changed: 14 additions & 16 deletions

File tree

‎vlib/v/driver/environment_test.v‎

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,15 +240,22 @@ fn test_v3_default_diagnostic_color_uses_environment() {
240240
assert ansi.red('error') == '\x1b[31merror\x1b[39m'
241241
}
242242

243-
fn test_release_unused_diagnostic_scope_rebinds_notices() {
243+
fn test_release_unused_diagnostic_scope_preserves_errors_and_rebinds_notices() {
244+
mut errors := []types.TypeError{cap: 1}
244245
mut notices := []types.TypeError{cap: 1}
245246
scope := prealloc_scope_begin_for_v3()
247+
errors << types.TypeError{ msg: 'first error' }
248+
errors << types.TypeError{ msg: 'second error' }
246249
notices << types.TypeError{ msg: 'first' }
247250
notices << types.TypeError{ msg: 'second' }
248251
$if prealloc {
252+
assert scoped_value_owned(scope, errors.data)
249253
assert scoped_value_owned(scope, notices.data)
250254
}
251-
release_unused_diagnostic_scope(mut notices, scope)
255+
release_unused_diagnostic_scope(mut errors, mut notices, scope)
256+
assert errors.len == 2
257+
assert errors[0].msg == 'first error'
258+
assert errors[1].msg == 'second error'
252259
assert notices.len == 0
253260
assert notices.cap == 0
254261
notices << types.TypeError{ msg: 'parent owned' }

‎vlib/v/types/checker_comptime.v‎

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4389,15 +4389,9 @@ fn (mut tc TypeChecker) check_cast_expr(id flat.NodeId, node flat.Node) {
43894389
}
43904390
return
43914391
}
4392-
actual_pointer := unalias_type(actual)
4393-
same_pointer_type := if actual_pointer is Pointer {
4394-
tc.type_compatible(actual_pointer.base_type, target_pointer.base_type)
4395-
} else {
4396-
false
4397-
}
43984392
if tc.unsafe_depth == 0 && !(target is Alias && tc.alias_type_is_shared(target))
4399-
&& actual_pointer is Pointer && struct_type_from_type(target_base) != none
4400-
&& actual.name() != target_name && !same_pointer_type {
4393+
&& unalias_type(actual) is Pointer && struct_type_from_type(target_base) != none
4394+
&& actual.name() != target_name {
44014395
tc.record_warning_at(.assignment_mismatch, 'casting `${actual.name()}` to `${target_name}` is only allowed in `unsafe` code', id, node.pos)
44024396
return
44034397
}

‎vlib/v/types/checker_parallel.v‎

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -908,19 +908,16 @@ fn (tc &TypeChecker) scan_unused_alive_range(fn_keys map[string][]int, const_key
908908
alive[cand_idx] = true
909909
}
910910
}
911-
if hits := fn_keys[node.value] {
912-
for cand_idx in hits {
913-
alive[cand_idx] = true
914-
}
915-
}
916911
short_name := short_name_view(node.value)
917912
if short_name.len != node.value.len {
918913
if hits := const_keys[short_name] {
919914
for cand_idx in hits {
920915
alive[cand_idx] = true
921916
}
922917
}
923-
if hits := fn_keys[short_name] {
918+
}
919+
if resolved := tc.resolved_fn_value_name(flat.NodeId(i)) {
920+
if hits := fn_keys[resolved] {
924921
for cand_idx in hits {
925922
alive[cand_idx] = true
926923
}

0 commit comments

Comments
 (0)