authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-04-07 15:09:55-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-04-07 15:09:55-07:00
log28ad4e6d83e307b814d76f53795fa5ff61bbdb2f
tree92b1390d05085e3a12def7d2701577c3be39fa18
parent3b535d2c3af5259a71916681d87ab0c01f24b58d

fix segfault in generic functions

See #22

2 files changed, 18 insertions(+), 2 deletions(-)

src/parser.cpp+6-2
......@@ -2861,8 +2861,12 @@ static void clone_subtree_list_ptr(ZigList<AstNode *> **dest_ptr, ZigList<AstNod
28612861}
28622862
28632863static void clone_subtree_field(AstNode **dest, AstNode *src, uint32_t *next_node_index) {
2864 *dest = ast_clone_subtree(src, next_node_index);
2865 (*dest)->parent_field = dest;
2864 if (src) {
2865 *dest = ast_clone_subtree(src, next_node_index);
2866 (*dest)->parent_field = dest;
2867 } else {
2868 *dest = nullptr;
2869 }
28662870}
28672871
28682872static void clone_subtree_tld(TopLevelDecl *dest, TopLevelDecl *src, uint32_t *next_node_index) {
test/self_hosted.zig+12
......@@ -542,6 +542,18 @@ fn generic_function_equality() {
542542}
543543
544544
545#attribute("test")
546fn generic_malloc_free() {
547 const a = %%mem_alloc(u8)(10);
548 mem_free(u8)(a);
549}
550const some_mem : [100]u8 = undefined;
551fn mem_alloc(T: type)(n: isize) -> %[]T {
552 return (&T)(&some_mem[0])[0...n];
553}
554fn mem_free(T: type)(mem: []T) { }
555
556
545557fn assert(b: bool) {
546558 if (!b) unreachable{}
547559}