authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-04-08 17:08:50-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-04-08 17:09:07-07:00
log491e3cb5c5e21477f9f45b25825e27905685760c
tree41fb6811454f4448027182761858c43a3ef2cd1e
parent4ce85ea0673b36d5603e18917b288c976cd71844

fix crash when passing empty string to function


3 files changed, 11 insertions(+), 1 deletions(-)

src/codegen.cpp+2-1
...@@ -333,6 +333,7 @@ static LLVMValueRef get_handle_value(CodeGen *g, AstNode *source_node, LLVMValue...@@ -333,6 +333,7 @@ static LLVMValueRef get_handle_value(CodeGen *g, AstNode *source_node, LLVMValue
333static LLVMValueRef gen_err_name(CodeGen *g, AstNode *node) {333static LLVMValueRef gen_err_name(CodeGen *g, AstNode *node) {
334 zig_panic("TODO");334 zig_panic("TODO");
335 //assert(node->type == NodeTypeFnCallExpr);335 //assert(node->type == NodeTypeFnCallExpr);
336 //assert(g->generate_error_name_table);
336 //AstNode *err_val_node = node->data.fn_call_expr.params.at(0);337 //AstNode *err_val_node = node->data.fn_call_expr.params.at(0);
337 //LLVMValueRef err_val = gen_expr(g, err_val_node);338 //LLVMValueRef err_val = gen_expr(g, err_val_node);
338 //arg339 //arg
...@@ -2895,7 +2896,7 @@ static LLVMValueRef gen_const_val(CodeGen *g, TypeTableEntry *type_entry, ConstE...@@ -2895,7 +2896,7 @@ static LLVMValueRef gen_const_val(CodeGen *g, TypeTableEntry *type_entry, ConstE
2895 }2896 }
2896 target_val = LLVMConstArray(child_type->type_ref, values, len);2897 target_val = LLVMConstArray(child_type->type_ref, values, len);
2897 } else {2898 } else {
2898 zig_unreachable();2899 return LLVMGetUndef(type_entry->type_ref);
2899 }2900 }
2900 LLVMValueRef global_value = LLVMAddGlobal(g->module, LLVMTypeOf(target_val), "");2901 LLVMValueRef global_value = LLVMAddGlobal(g->module, LLVMTypeOf(target_val), "");
2901 LLVMSetInitializer(global_value, target_val);2902 LLVMSetInitializer(global_value, target_val);
src/parser.cpp+3
...@@ -278,6 +278,9 @@ static void parse_string_literal(ParseContext *pc, Token *token, Buf *buf, bool...@@ -278,6 +278,9 @@ static void parse_string_literal(ParseContext *pc, Token *token, Buf *buf, bool
278 buf_append_char(buf, '"');278 buf_append_char(buf, '"');
279 if (offset_map) offset_map->append(pos);279 if (offset_map) offset_map->append(pos);
280 break;280 break;
281 case 'x':
282 zig_panic("TODO");
283 break;
281 default:284 default:
282 ast_error(pc, token, "invalid escape character");285 ast_error(pc, token, "invalid escape character");
283 break;286 break;
test/self_hosted.zig+6
...@@ -554,3 +554,9 @@ fn mem_alloc(T: type)(n: isize) -> %[]T {...@@ -554,3 +554,9 @@ fn mem_alloc(T: type)(n: isize) -> %[]T {
554fn mem_free(T: type)(mem: []T) { }554fn mem_free(T: type)(mem: []T) { }
555555
556556
557#attribute("test")
558fn call_fn_with_empty_string() {
559 accepts_string("");
560}
561
562fn accepts_string(foo: []u8) { }