diff options
| author | Jimmi Holst Christensen <jimmi@ziglang.org> | 2018-12-19 15:39:18 +0100 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2018-12-19 09:39:18 -0500 |
| commit | 45e72c0b3944b2fa6d06c7018e9648b4ae60006a (patch) | |
| tree | 10e8ac90465e7bb81005607890b1caf2c4d47e1a | |
| parent | 260c3d9cc0c85c1c4dce98bda9e15ca49ca87d74 (diff) | |
| download | zig-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.cpp | 1 | ||||
| -rw-r--r-- | test/behavior.zig | 1 | ||||
| -rw-r--r-- | test/cases/inttoptr.zig | 13 |
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); +} |
