Merge pull request #14789 from jacobly0/ditype

llvm: fix use after free with pointers to optional slices
This commit is contained in:
Andrew Kelley
2023-03-05 16:32:51 -05:00
committed by GitHub
2 changed files with 21 additions and 1 deletions
+20
View File
@@ -747,3 +747,23 @@ test "slice decays to many pointer" {
const p: [*:0]const u8 = buf[0..7 :0];
try expectEqualStrings(buf[0..7], std.mem.span(p));
}
test "write through pointer to optional slice arg" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
const S = struct {
fn bar(foo: *?[]const u8) !void {
foo.* = try baz();
}
fn baz() ![]const u8 {
return "ok";
}
};
var foo: ?[]const u8 = null;
try S.bar(&foo);
try expectEqualStrings(foo.?, "ok");
}