aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-08-21 15:00:40 -0700
committerAndrew Kelley <andrew@ziglang.org>2021-08-21 20:47:42 -0700
commit2b40815a220bbbd657bfa441e304090f11f1eb4c (patch)
tree01ba879103b9f49d58ea90a3244933c58dc34be2 /src/Sema.zig
parentf28868e8fd4028cad29bd2de8c0aa1c1713c69dd (diff)
downloadzig-2b40815a220bbbd657bfa441e304090f11f1eb4c.tar.gz
zig-2b40815a220bbbd657bfa441e304090f11f1eb4c.zip
stage2: fix wrong value for Decl owns_tv
In the case of a comptime function call of a function that returns a type, resulting in a compiler crash on deinit().
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 8ffc828fba..36ac4d224d 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -866,6 +866,7 @@ fn zirStructDecl(
.ty = Type.initTag(.type),
.val = struct_val,
}, type_name);
+ new_decl.owns_tv = true;
errdefer sema.mod.deleteAnonDecl(&block.base, new_decl);
struct_obj.* = .{
.owner_decl = new_decl,
@@ -986,6 +987,7 @@ fn zirEnumDecl(
.ty = Type.initTag(.type),
.val = enum_val,
}, type_name);
+ new_decl.owns_tv = true;
errdefer sema.mod.deleteAnonDecl(&block.base, new_decl);
enum_obj.* = .{
@@ -1152,6 +1154,7 @@ fn zirUnionDecl(
.ty = Type.initTag(.type),
.val = union_val,
}, type_name);
+ new_decl.owns_tv = true;
errdefer sema.mod.deleteAnonDecl(&block.base, new_decl);
union_obj.* = .{
.owner_decl = new_decl,
@@ -1223,6 +1226,7 @@ fn zirErrorSetDecl(
.ty = Type.initTag(.type),
.val = error_set_val,
}, type_name);
+ new_decl.owns_tv = true;
errdefer sema.mod.deleteAnonDecl(&block.base, new_decl);
const names = try new_decl_arena.allocator.alloc([]const u8, fields.len);
for (fields) |str_index, i| {