aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/llvm.zig
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-11-11 17:56:37 +0200
committerVeikka Tuominen <git@vexu.eu>2022-11-12 15:41:29 +0200
commitd42f4abb9dc906ef20b622656c7672cb7df02096 (patch)
treefa5bc68b71fe6b180e28abe2bf31a1b44dfb63c0 /src/codegen/llvm.zig
parente01ec96288bd32c7ec3bba01ee200cc115cdfb1d (diff)
downloadzig-d42f4abb9dc906ef20b622656c7672cb7df02096.tar.gz
zig-d42f4abb9dc906ef20b622656c7672cb7df02096.zip
llvm: correctly lower references to generic functions
Closes #13522
Diffstat (limited to 'src/codegen/llvm.zig')
-rw-r--r--src/codegen/llvm.zig7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig
index 2daad01936..506c34af1d 100644
--- a/src/codegen/llvm.zig
+++ b/src/codegen/llvm.zig
@@ -3198,7 +3198,8 @@ pub const DeclGen = struct {
/// There are other similar cases handled here as well.
fn lowerPtrElemTy(dg: *DeclGen, elem_ty: Type) Allocator.Error!*llvm.Type {
const lower_elem_ty = switch (elem_ty.zigTypeTag()) {
- .Opaque, .Fn => true,
+ .Opaque => true,
+ .Fn => !elem_ty.fnInfo().is_generic,
.Array => elem_ty.childType().hasRuntimeBitsIgnoreComptime(),
else => elem_ty.hasRuntimeBitsIgnoreComptime(),
};
@@ -4145,7 +4146,9 @@ pub const DeclGen = struct {
}
const is_fn_body = decl.ty.zigTypeTag() == .Fn;
- if (!is_fn_body and !decl.ty.hasRuntimeBits()) {
+ if ((!is_fn_body and !decl.ty.hasRuntimeBits()) or
+ (is_fn_body and decl.ty.fnInfo().is_generic))
+ {
return self.lowerPtrToVoid(tv.ty);
}