authorgravatar for public@enkore.deMarian Beermann <public@enkore.de> 2021-12-31 18:33:43+01:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-01-01 10:28:47+02:00
log55709de185d973d9866aa761372817e0c3e8774d
tree02d6806985ecdc00b8f3d4716ed2b5e5c8bf30aa
parentcea6e8b2d8bd0143010d58c91cfef9992143b2c2

stage1: fix @errorName null termination


2 files changed, 12 insertions(+), 1 deletions(-)

src/stage1/codegen.cpp+1-1
......@@ -8193,7 +8193,7 @@ static void generate_error_name_table(CodeGen *g) {
81938193
81948194 g->largest_err_name_len = max(g->largest_err_name_len, buf_len(name));
81958195
8196 LLVMValueRef str_init = LLVMConstString(buf_ptr(name), (unsigned)buf_len(name), true);
8196 LLVMValueRef str_init = LLVMConstString(buf_ptr(name), (unsigned)buf_len(name), false);
81978197 LLVMValueRef str_global = LLVMAddGlobal(g->module, LLVMTypeOf(str_init), "");
81988198 LLVMSetInitializer(str_global, str_init);
81998199 LLVMSetLinkage(str_global, LLVMPrivateLinkage);
test/behavior/error_stage1.zig+11
......@@ -14,6 +14,17 @@ test "@errorName" {
1414 try expect(mem.eql(u8, @errorName(gimmeItBroke()), "ItBroke"));
1515}
1616
17test "@errorName sentinel length matches slice length" {
18 const name = testBuiltinErrorName(error.FooBar);
19 const length: usize = 6;
20 try expectEqual(length, std.mem.indexOfSentinel(u8, 0, name.ptr));
21 try expectEqual(length, name.len);
22}
23
24pub fn testBuiltinErrorName(err: anyerror) [:0]const u8 {
25 return @errorName(err);
26}
27
1728test "error union type " {
1829 try testErrorUnionType();
1930 comptime try testErrorUnionType();