From 3ef6663b723e7391edbe84d3df48fcc79c66bc1f Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 26 Dec 2016 03:02:20 -0500 Subject: [PATCH] IR: pass genericMallocFree test --- src/analyze.cpp | 2 +- src/ir.cpp | 6 +++--- test/cases/misc.zig | 14 ++++++++++++++ test/self_hosted.zig | 22 ---------------------- 4 files changed, 18 insertions(+), 26 deletions(-) diff --git a/src/analyze.cpp b/src/analyze.cpp index 49245dfcf..c1cced125 100644 --- a/src/analyze.cpp +++ b/src/analyze.cpp @@ -2839,7 +2839,6 @@ bool type_requires_comptime(TypeTableEntry *type_entry) { case TypeTableEntryIdUndefLit: case TypeTableEntryIdNullLit: case TypeTableEntryIdMetaType: - case TypeTableEntryIdVoid: case TypeTableEntryIdNamespace: case TypeTableEntryIdBlock: case TypeTableEntryIdBoundFn: @@ -2857,6 +2856,7 @@ bool type_requires_comptime(TypeTableEntry *type_entry) { case TypeTableEntryIdFloat: case TypeTableEntryIdPointer: case TypeTableEntryIdEnumTag: + case TypeTableEntryIdVoid: return false; } zig_unreachable(); diff --git a/src/ir.cpp b/src/ir.cpp index 369369aec..51a652451 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -6350,13 +6350,13 @@ static bool ir_analyze_fn_call_inline_arg(IrAnalyze *ira, AstNode *fn_proto_node if (casted_arg->value.type->id == TypeTableEntryIdInvalid) return false; - ConstExprValue *first_arg_val = ir_resolve_const(ira, casted_arg, UndefBad); - if (!first_arg_val) + ConstExprValue *arg_val = ir_resolve_const(ira, casted_arg, UndefBad); + if (!arg_val) return false; Buf *param_name = param_decl_node->data.param_decl.name; VariableTableEntry *var = add_variable(ira->codegen, param_decl_node, - *exec_scope, param_name, true, first_arg_val); + *exec_scope, param_name, true, arg_val); *exec_scope = var->child_scope; *next_proto_i += 1; diff --git a/test/cases/misc.zig b/test/cases/misc.zig index 304064798..762c5e929 100644 --- a/test/cases/misc.zig +++ b/test/cases/misc.zig @@ -278,6 +278,20 @@ fn explicitCastMaybePointers() { const b: ?&f32 = (?&f32)(a); } +fn genericMallocFree() { + @setFnTest(this); + + const a = %%memAlloc(u8, 10); + memFree(u8, a); +} +const some_mem : [100]u8 = undefined; +fn memAlloc(inline T: type, n: usize) -> %[]T { + return (&T)(&some_mem[0])[0...n]; +} +fn memFree(inline T: type, mem: []T) { } + + + // TODO import from std.str pub fn memeql(a: []const u8, b: []const u8) -> bool { diff --git a/test/self_hosted.zig b/test/self_hosted.zig index daf44d2a3..24e90da68 100644 --- a/test/self_hosted.zig +++ b/test/self_hosted.zig @@ -4,28 +4,6 @@ const str = std.str; const cstr = std.cstr; -fn explicitCastMaybePointers() { - @setFnTest(this); - - const a: ?&i32 = undefined; - const b: ?&f32 = (?&f32)(a); -} - -fn genericMallocFree() { - @setFnTest(this, true); - - const a = %%memAlloc(u8, 10); - memFree(u8, a); -} -const some_mem : [100]u8 = undefined; -fn memAlloc(inline T: type, n: usize) -> %[]T { - @setFnStaticEval(this, false); - - return (&T)(&some_mem[0])[0...n]; -} -fn memFree(inline T: type, mem: []T) { } - - fn castUndefined() { @setFnTest(this, true);