Skip to content

Commit 25dbee9

Browse files
Fix resolved type of pointer to const array element
1 parent 37d3c6c commit 25dbee9

2 files changed

Lines changed: 17 additions & 9 deletions

File tree

src/analysis.zig

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1785,15 +1785,6 @@ fn resolveTypeOfNodeUncached(analyser: *Analyser, node_handle: NodeWithHandle) e
17851785

17861786
return try analyser.resolveOptionalUnwrap(base_type);
17871787
},
1788-
.array_access => {
1789-
const lhs_node, const rhs_node = tree.nodeData(node).node_and_node;
1790-
1791-
const lhs = try analyser.resolveTypeOfNodeInternal(.of(lhs_node, handle)) orelse return null;
1792-
1793-
const index = try analyser.resolveIntegerLiteral(u64, .of(rhs_node, handle));
1794-
1795-
return try analyser.resolveBracketAccessType(lhs, .{ .single = index });
1796-
},
17971788
.@"orelse" => {
17981789
const lhs_node, const rhs_node = tree.nodeData(node).node_and_node;
17991790

@@ -2725,6 +2716,7 @@ fn resolveTypeOfNodeUncached(analyser: *Analyser, node_handle: NodeWithHandle) e
27252716
.slice,
27262717
.slice_sentinel,
27272718
.slice_open,
2719+
.array_access,
27282720
=> {
27292721
const binding = try analyser.resolveBindingOfNodeUncached(node_handle) orelse return null;
27302722
return binding.type;
@@ -2818,6 +2810,19 @@ fn resolveBindingOfNodeUncached(analyser: *Analyser, node_handle: NodeWithHandle
28182810
};
28192811
},
28202812

2813+
.array_access => {
2814+
const lhs_node, const rhs_node = tree.nodeData(node).node_and_node;
2815+
2816+
const lhs = try analyser.resolveBindingOfNodeInternal(.of(lhs_node, handle)) orelse return null;
2817+
2818+
const index = try analyser.resolveIntegerLiteral(u64, .of(rhs_node, handle));
2819+
2820+
return .{
2821+
.type = try analyser.resolveBracketAccessTypeFromBinding(lhs, .{ .single = index }) orelse return null,
2822+
.is_const = true,
2823+
};
2824+
},
2825+
28212826
else => return .{
28222827
.type = try analyser.resolveTypeOfNodeUncached(node_handle) orelse return null,
28232828
.is_const = false,

tests/analysis/array.zig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ const some_unsized_array_len = some_unsized_array.len;
3232
const array_indexing = some_array[0];
3333
// ^^^^^^^^^^^^^^ (u8)()
3434

35+
const array_indexing_pointer = &some_array[0];
36+
// ^^^^^^^^^^^^^^^^^^^^^^ (*const u8)()
37+
3538
const array_slice_open_1 = some_array[1..];
3639
// ^^^^^^^^^^^^^^^^^^ (*const [2]u8)()
3740

0 commit comments

Comments
 (0)