commit 9eb51e20ed1a040a617541303db760f80ffd3aa1 (tree)
parent 42ba06133aec995feec3ea24ee7fbbc40d7ac2ca
Author: Andrew Kelley <superjoe30@gmail.com>
Date: Mon, 9 Jul 2018 10:43:29 -0400
fix crash on @ptrToInt of a *void
closes #1192
Diffstat:
2 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/src/ir.cpp b/src/ir.cpp
@@ -19796,6 +19796,12 @@ static TypeTableEntry *ir_analyze_instruction_ptr_to_int(IrAnalyze *ira, IrInstr
return ira->codegen->builtin_types.entry_invalid;
}
+ if (!type_has_bits(target->value.type)) {
+ ir_add_error(ira, target,
+ buf_sprintf("pointer to size 0 type has no address"));
+ return ira->codegen->builtin_types.entry_invalid;
+ }
+
if (instr_is_comptime(target)) {
ConstExprValue *val = ir_resolve_const(ira, target, UndefBad);
if (!val)
diff --git a/test/compile_errors.zig b/test/compile_errors.zig
@@ -2,6 +2,15 @@ const tests = @import("tests.zig");
pub fn addCases(cases: *tests.CompileErrorContext) void {
cases.add(
+ "@ptrToInt on *void",
+ \\export fn entry() bool {
+ \\ return @ptrToInt(&{}) == @ptrToInt(&{});
+ \\}
+ ,
+ ".tmp_source.zig:2:23: error: pointer to size 0 type has no address",
+ );
+
+ cases.add(
"@popCount - non-integer",
\\export fn entry(x: f32) u32 {
\\ return @popCount(x);