aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/codegen/llvm.zig28
-rw-r--r--src/type.zig2
2 files changed, 17 insertions, 13 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig
index 209e3fb4de..07fe138786 100644
--- a/src/codegen/llvm.zig
+++ b/src/codegen/llvm.zig
@@ -761,21 +761,25 @@ pub const DeclGen = struct {
dg.context.intType(8);
return llvm_elem_ty.pointerType(llvm_addrspace);
},
- .Opaque => {
- const gop = try dg.object.type_map.getOrPut(gpa, t);
- if (gop.found_existing) return gop.value_ptr.*;
+ .Opaque => switch (t.tag()) {
+ .@"opaque" => {
+ const gop = try dg.object.type_map.getOrPut(gpa, t);
+ if (gop.found_existing) return gop.value_ptr.*;
- // The Type memory is ephemeral; since we want to store a longer-lived
- // reference, we need to copy it here.
- gop.key_ptr.* = try t.copy(dg.object.type_map_arena.allocator());
+ // The Type memory is ephemeral; since we want to store a longer-lived
+ // reference, we need to copy it here.
+ gop.key_ptr.* = try t.copy(dg.object.type_map_arena.allocator());
- const opaque_obj = t.castTag(.@"opaque").?.data;
- const name = try opaque_obj.getFullyQualifiedName(gpa);
- defer gpa.free(name);
+ const opaque_obj = t.castTag(.@"opaque").?.data;
+ const name = try opaque_obj.getFullyQualifiedName(gpa);
+ defer gpa.free(name);
- const llvm_struct_ty = dg.context.structCreateNamed(name);
- gop.value_ptr.* = llvm_struct_ty; // must be done before any recursive calls
- return llvm_struct_ty;
+ const llvm_struct_ty = dg.context.structCreateNamed(name);
+ gop.value_ptr.* = llvm_struct_ty; // must be done before any recursive calls
+ return llvm_struct_ty;
+ },
+ .anyopaque => return dg.context.intType(8),
+ else => unreachable,
},
.Array => {
const elem_type = try dg.llvmType(t.childType());
diff --git a/src/type.zig b/src/type.zig
index a81bd3ed32..fb16a4d0f1 100644
--- a/src/type.zig
+++ b/src/type.zig
@@ -1575,6 +1575,7 @@ pub const Type = extern union {
.extern_options,
.@"anyframe",
.anyframe_T,
+ .anyopaque,
.@"opaque",
.single_const_pointer,
.single_mut_pointer,
@@ -1654,7 +1655,6 @@ pub const Type = extern union {
return payload.error_set.hasCodeGenBits() or payload.payload.hasCodeGenBits();
},
- .anyopaque,
.void,
.type,
.comptime_int,