aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJimmi Holst Christensen <jimmi@ziglang.org>2018-12-19 15:39:18 +0100
committerAndrew Kelley <andrew@ziglang.org>2018-12-19 09:39:18 -0500
commit45e72c0b3944b2fa6d06c7018e9648b4ae60006a (patch)
tree10e8ac90465e7bb81005607890b1caf2c4d47e1a
parent260c3d9cc0c85c1c4dce98bda9e15ca49ca87d74 (diff)
downloadzig-45e72c0b3944b2fa6d06c7018e9648b4ae60006a.tar.gz
zig-45e72c0b3944b2fa6d06c7018e9648b4ae60006a.zip
Fixed intToPtr to fn type when the address is hardcoded (#1842)
* Fixed intToPtr to fn type * Added test * Import inttoptr.zig in behavior.zig
-rw-r--r--src/ir.cpp1
-rw-r--r--test/behavior.zig1
-rw-r--r--test/cases/inttoptr.zig13
3 files changed, 15 insertions, 0 deletions
diff --git a/src/ir.cpp b/src/ir.cpp
index 76dd6c6391..028582f87f 100644
--- a/src/ir.cpp
+++ b/src/ir.cpp
@@ -12495,6 +12495,7 @@ static IrInstruction *ir_analyze_instruction_decl_var(IrAnalyze *ira, IrInstruct
case ReqCompTimeNo:
if (casted_init_value->value.special == ConstValSpecialStatic &&
casted_init_value->value.type->id == ZigTypeIdFn &&
+ casted_init_value->value.data.x_ptr.special != ConstPtrSpecialHardCodedAddr &&
casted_init_value->value.data.x_ptr.data.fn.fn_entry->fn_inline == FnInlineAlways)
{
var_class_requires_const = true;
diff --git a/test/behavior.zig b/test/behavior.zig
index e32063dec8..8090359772 100644
--- a/test/behavior.zig
+++ b/test/behavior.zig
@@ -42,6 +42,7 @@ comptime {
_ = @import("cases/if.zig");
_ = @import("cases/import.zig");
_ = @import("cases/incomplete_struct_param_tld.zig");
+ _ = @import("cases/inttoptr.zig");
_ = @import("cases/ir_block_deps.zig");
_ = @import("cases/math.zig");
_ = @import("cases/merge_error_sets.zig");
diff --git a/test/cases/inttoptr.zig b/test/cases/inttoptr.zig
new file mode 100644
index 0000000000..6695352383
--- /dev/null
+++ b/test/cases/inttoptr.zig
@@ -0,0 +1,13 @@
+const builtin = @import("builtin");
+const std = @import("std");
+const assertOrPanic = std.debug.assertOrPanic;
+
+test "casting random address to function pointer" {
+ randomAddressToFunction();
+ comptime randomAddressToFunction();
+}
+
+fn randomAddressToFunction() void {
+ var addr: usize = 0xdeadbeef;
+ var ptr = @intToPtr(fn () void, addr);
+}