authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-12-26 03:02:20-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-12-26 03:02:20-05:00
log3ef6663b723e7391edbe84d3df48fcc79c66bc1f
tree3e646a0719a362fd547f1f250fa0e82bff620a1e
parent110a6f39ca9cf578e014461f2e9eef2691a2368d

IR: pass genericMallocFree test


4 files changed, 18 insertions(+), 26 deletions(-)

src/analyze.cpp+1-1
......@@ -2839,7 +2839,6 @@ bool type_requires_comptime(TypeTableEntry *type_entry) {
28392839 case TypeTableEntryIdUndefLit:
28402840 case TypeTableEntryIdNullLit:
28412841 case TypeTableEntryIdMetaType:
2842 case TypeTableEntryIdVoid:
28432842 case TypeTableEntryIdNamespace:
28442843 case TypeTableEntryIdBlock:
28452844 case TypeTableEntryIdBoundFn:
......@@ -2857,6 +2856,7 @@ bool type_requires_comptime(TypeTableEntry *type_entry) {
28572856 case TypeTableEntryIdFloat:
28582857 case TypeTableEntryIdPointer:
28592858 case TypeTableEntryIdEnumTag:
2859 case TypeTableEntryIdVoid:
28602860 return false;
28612861 }
28622862 zig_unreachable();
src/ir.cpp+3-3
......@@ -6350,13 +6350,13 @@ static bool ir_analyze_fn_call_inline_arg(IrAnalyze *ira, AstNode *fn_proto_node
63506350 if (casted_arg->value.type->id == TypeTableEntryIdInvalid)
63516351 return false;
63526352
6353 ConstExprValue *first_arg_val = ir_resolve_const(ira, casted_arg, UndefBad);
6354 if (!first_arg_val)
6353 ConstExprValue *arg_val = ir_resolve_const(ira, casted_arg, UndefBad);
6354 if (!arg_val)
63556355 return false;
63566356
63576357 Buf *param_name = param_decl_node->data.param_decl.name;
63586358 VariableTableEntry *var = add_variable(ira->codegen, param_decl_node,
6359 *exec_scope, param_name, true, first_arg_val);
6359 *exec_scope, param_name, true, arg_val);
63606360 *exec_scope = var->child_scope;
63616361 *next_proto_i += 1;
63626362
test/cases/misc.zig+14
......@@ -278,6 +278,20 @@ fn explicitCastMaybePointers() {
278278 const b: ?&f32 = (?&f32)(a);
279279}
280280
281fn genericMallocFree() {
282 @setFnTest(this);
283
284 const a = %%memAlloc(u8, 10);
285 memFree(u8, a);
286}
287const some_mem : [100]u8 = undefined;
288fn memAlloc(inline T: type, n: usize) -> %[]T {
289 return (&T)(&some_mem[0])[0...n];
290}
291fn memFree(inline T: type, mem: []T) { }
292
293
294
281295
282296// TODO import from std.str
283297pub fn memeql(a: []const u8, b: []const u8) -> bool {
test/self_hosted.zig-22
......@@ -4,28 +4,6 @@ const str = std.str;
44const cstr = std.cstr;
55
66
7fn explicitCastMaybePointers() {
8 @setFnTest(this);
9
10 const a: ?&i32 = undefined;
11 const b: ?&f32 = (?&f32)(a);
12}
13
14fn genericMallocFree() {
15 @setFnTest(this, true);
16
17 const a = %%memAlloc(u8, 10);
18 memFree(u8, a);
19}
20const some_mem : [100]u8 = undefined;
21fn memAlloc(inline T: type, n: usize) -> %[]T {
22 @setFnStaticEval(this, false);
23
24 return (&T)(&some_mem[0])[0...n];
25}
26fn memFree(inline T: type, mem: []T) { }
27
28
297fn castUndefined() {
308 @setFnTest(this, true);
319