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) {...@@ -2839,7 +2839,6 @@ bool type_requires_comptime(TypeTableEntry *type_entry) {
2839 case TypeTableEntryIdUndefLit:2839 case TypeTableEntryIdUndefLit:
2840 case TypeTableEntryIdNullLit:2840 case TypeTableEntryIdNullLit:
2841 case TypeTableEntryIdMetaType:2841 case TypeTableEntryIdMetaType:
2842 case TypeTableEntryIdVoid:
2843 case TypeTableEntryIdNamespace:2842 case TypeTableEntryIdNamespace:
2844 case TypeTableEntryIdBlock:2843 case TypeTableEntryIdBlock:
2845 case TypeTableEntryIdBoundFn:2844 case TypeTableEntryIdBoundFn:
...@@ -2857,6 +2856,7 @@ bool type_requires_comptime(TypeTableEntry *type_entry) {...@@ -2857,6 +2856,7 @@ bool type_requires_comptime(TypeTableEntry *type_entry) {
2857 case TypeTableEntryIdFloat:2856 case TypeTableEntryIdFloat:
2858 case TypeTableEntryIdPointer:2857 case TypeTableEntryIdPointer:
2859 case TypeTableEntryIdEnumTag:2858 case TypeTableEntryIdEnumTag:
2859 case TypeTableEntryIdVoid:
2860 return false;2860 return false;
2861 }2861 }
2862 zig_unreachable();2862 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...@@ -6350,13 +6350,13 @@ static bool ir_analyze_fn_call_inline_arg(IrAnalyze *ira, AstNode *fn_proto_node
6350 if (casted_arg->value.type->id == TypeTableEntryIdInvalid)6350 if (casted_arg->value.type->id == TypeTableEntryIdInvalid)
6351 return false;6351 return false;
63526352
6353 ConstExprValue *first_arg_val = ir_resolve_const(ira, casted_arg, UndefBad);6353 ConstExprValue *arg_val = ir_resolve_const(ira, casted_arg, UndefBad);
6354 if (!first_arg_val)6354 if (!arg_val)
6355 return false;6355 return false;
63566356
6357 Buf *param_name = param_decl_node->data.param_decl.name;6357 Buf *param_name = param_decl_node->data.param_decl.name;
6358 VariableTableEntry *var = add_variable(ira->codegen, param_decl_node,6358 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);
6360 *exec_scope = var->child_scope;6360 *exec_scope = var->child_scope;
6361 *next_proto_i += 1;6361 *next_proto_i += 1;
63626362
test/cases/misc.zig+14
...@@ -278,6 +278,20 @@ fn explicitCastMaybePointers() {...@@ -278,6 +278,20 @@ fn explicitCastMaybePointers() {
278 const b: ?&f32 = (?&f32)(a);278 const b: ?&f32 = (?&f32)(a);
279}279}
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
282// TODO import from std.str296// TODO import from std.str
283pub fn memeql(a: []const u8, b: []const u8) -> bool {297pub fn memeql(a: []const u8, b: []const u8) -> bool {
test/self_hosted.zig-22
...@@ -4,28 +4,6 @@ const str = std.str;...@@ -4,28 +4,6 @@ const str = std.str;
4const cstr = std.cstr;4const 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
29fn castUndefined() {7fn castUndefined() {
30 @setFnTest(this, true);8 @setFnTest(this, true);
319