aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.cpp
diff options
context:
space:
mode:
authorLemonBoy <thatlemon@gmail.com>2019-11-06 22:49:24 +0100
committerAndrew Kelley <andrew@ziglang.org>2019-11-07 02:46:10 -0500
commit528908a06e9663a5e6595fc5ff80e017c663dc76 (patch)
treef23dba18a6fedc310c7cd0de3cc81e091abfc642 /src/codegen.cpp
parentc7fd414dab3c69819c6528e8dcbb9de8ab17cdf9 (diff)
downloadzig-528908a06e9663a5e6595fc5ff80e017c663dc76.tar.gz
zig-528908a06e9663a5e6595fc5ff80e017c663dc76.zip
Fix ptrCast of array references to fn
Closes #3607
Diffstat (limited to 'src/codegen.cpp')
-rw-r--r--src/codegen.cpp12
1 files changed, 4 insertions, 8 deletions
diff --git a/src/codegen.cpp b/src/codegen.cpp
index 154c21893a..7d3ae656fb 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -7050,16 +7050,12 @@ check: switch (const_val->special) {
case ZigTypeIdEnum:
return bigint_to_llvm_const(get_llvm_type(g, type_entry), &const_val->data.x_enum_tag);
case ZigTypeIdFn:
- if (const_val->data.x_ptr.special == ConstPtrSpecialFunction) {
- assert(const_val->data.x_ptr.mut == ConstPtrMutComptimeConst);
- return fn_llvm_value(g, const_val->data.x_ptr.data.fn.fn_entry);
- } else if (const_val->data.x_ptr.special == ConstPtrSpecialHardCodedAddr) {
- LLVMTypeRef usize_type_ref = g->builtin_types.entry_usize->llvm_type;
- uint64_t addr = const_val->data.x_ptr.data.hard_coded_addr.addr;
- return LLVMConstIntToPtr(LLVMConstInt(usize_type_ref, addr, false), get_llvm_type(g, type_entry));
- } else {
+ if (const_val->data.x_ptr.special == ConstPtrSpecialFunction &&
+ const_val->data.x_ptr.mut != ConstPtrMutComptimeConst) {
zig_unreachable();
}
+ // Treat it the same as we do for pointers
+ return gen_const_val_ptr(g, const_val, name);
case ZigTypeIdPointer:
return gen_const_val_ptr(g, const_val, name);
case ZigTypeIdErrorUnion: