authorgravatar for alex_naskos@hotmail.comAlexandros Naskos <alex_naskos@hotmail.com> 2020-06-24 21:04:31+03:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-06-24 23:58:02-04:00
log2fde8249b72f22ddfa16793c245315f30c7f3ff8
tree1b5eddc4444c3c1cc09df2c01963cc3cd02d344c
parentd337469e4484ffd160b4508e2366fefd435f6c8a

Fixed crash when resolving peer types of *[N:s]const T and [*:s]const T


3 files changed, 8 insertions(+), 0 deletions(-)

src/ir.cpp+1
...@@ -12603,6 +12603,7 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT...@@ -12603,6 +12603,7 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT
12603 prev_type->data.pointer.child_type->id == ZigTypeIdArray &&12603 prev_type->data.pointer.child_type->id == ZigTypeIdArray &&
12604 ((cur_type->id == ZigTypeIdPointer && cur_type->data.pointer.ptr_len == PtrLenUnknown)))12604 ((cur_type->id == ZigTypeIdPointer && cur_type->data.pointer.ptr_len == PtrLenUnknown)))
12605 {12605 {
12606 convert_to_const_slice = false;
12606 prev_inst = cur_inst;12607 prev_inst = cur_inst;
1260712608
12608 if (prev_type->data.pointer.is_const && !cur_type->data.pointer.is_const) {12609 if (prev_type->data.pointer.is_const && !cur_type->data.pointer.is_const) {
test/stage1/behavior.zig+1
...@@ -50,6 +50,7 @@ comptime {...@@ -50,6 +50,7 @@ comptime {
50 _ = @import("behavior/bugs/4769_b.zig");50 _ = @import("behavior/bugs/4769_b.zig");
51 _ = @import("behavior/bugs/4769_c.zig");51 _ = @import("behavior/bugs/4769_c.zig");
52 _ = @import("behavior/bugs/4954.zig");52 _ = @import("behavior/bugs/4954.zig");
53 _ = @import("behavior/bugs/5413.zig");
53 _ = @import("behavior/bugs/5474.zig");54 _ = @import("behavior/bugs/5474.zig");
54 _ = @import("behavior/bugs/5487.zig");55 _ = @import("behavior/bugs/5487.zig");
55 _ = @import("behavior/bugs/394.zig");56 _ = @import("behavior/bugs/394.zig");
test/stage1/behavior/bugs/5413.zig created+6
...@@ -0,0 +1,6 @@
1const expect = @import("std").testing.expect;
2
3test "Peer type resolution with string literals and unknown length u8 pointers" {
4 expect(@TypeOf("", "a", @as([*:0]const u8, "")) == [*:0]const u8);
5 expect(@TypeOf(@as([*:0]const u8, "baz"), "foo", "bar") == [*:0]const u8);
6}