authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-04-09 16:52:52-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-04-09 16:52:52-07:00
log7eb6af1d3e92510cb558d43ac80c45964f183bb7
treee542ce10e3355773a1c238fb760a6104ec82aa7b
parent21eca6478f80f871f839b20044869cead55582a5

add @breakpoint()


3 files changed, 13 insertions(+), 2 deletions(-)

src/all_types.hpp+1
...@@ -1050,6 +1050,7 @@ enum BuiltinFnId {...@@ -1050,6 +1050,7 @@ enum BuiltinFnId {
1050 BuiltinFnIdImport,1050 BuiltinFnIdImport,
1051 BuiltinFnIdCImport,1051 BuiltinFnIdCImport,
1052 BuiltinFnIdErrName,1052 BuiltinFnIdErrName,
1053 BuiltinFnIdBreakpoint,
1053};1054};
10541055
1055struct BuiltinFnEntry {1056struct BuiltinFnEntry {
src/analyze.cpp+2
...@@ -4606,6 +4606,8 @@ static TypeTableEntry *analyze_builtin_fn_call_expr(CodeGen *g, ImportTableEntry...@@ -4606,6 +4606,8 @@ static TypeTableEntry *analyze_builtin_fn_call_expr(CodeGen *g, ImportTableEntry
4606 return analyze_c_import(g, import, context, node);4606 return analyze_c_import(g, import, context, node);
4607 case BuiltinFnIdErrName:4607 case BuiltinFnIdErrName:
4608 return analyze_err_name(g, import, context, node);4608 return analyze_err_name(g, import, context, node);
4609 case BuiltinFnIdBreakpoint:
4610 return g->builtin_types.entry_void;
4609 }4611 }
4610 zig_unreachable();4612 zig_unreachable();
4611}4613}
src/codegen.cpp+10-2
...@@ -513,6 +513,8 @@ static LLVMValueRef gen_builtin_fn_call_expr(CodeGen *g, AstNode *node) {...@@ -513,6 +513,8 @@ static LLVMValueRef gen_builtin_fn_call_expr(CodeGen *g, AstNode *node) {
513 return nullptr;513 return nullptr;
514 case BuiltinFnIdErrName:514 case BuiltinFnIdErrName:
515 return gen_err_name(g, node);515 return gen_err_name(g, node);
516 case BuiltinFnIdBreakpoint:
517 return LLVMBuildCall(g->builder, g->trap_fn_val, nullptr, 0, "");
516 }518 }
517 zig_unreachable();519 zig_unreachable();
518}520}
...@@ -3790,9 +3792,15 @@ static BuiltinFnEntry *create_builtin_fn_with_arg_count(CodeGen *g, BuiltinFnId...@@ -3790,9 +3792,15 @@ static BuiltinFnEntry *create_builtin_fn_with_arg_count(CodeGen *g, BuiltinFnId
37903792
3791static void define_builtin_fns(CodeGen *g) {3793static void define_builtin_fns(CodeGen *g) {
3792 {3794 {
3795 BuiltinFnEntry *builtin_fn = create_builtin_fn_with_arg_count(g, BuiltinFnIdBreakpoint, "breakpoint", 0);
3796 builtin_fn->return_type = g->builtin_types.entry_void;
3797 builtin_fn->ref_count = 1;
3798
3793 LLVMTypeRef fn_type = LLVMFunctionType(LLVMVoidType(), nullptr, 0, false);3799 LLVMTypeRef fn_type = LLVMFunctionType(LLVMVoidType(), nullptr, 0, false);
3794 g->trap_fn_val = LLVMAddFunction(g->module, "llvm.debugtrap", fn_type);3800 builtin_fn->fn_val = LLVMAddFunction(g->module, "llvm.debugtrap", fn_type);
3795 assert(LLVMGetIntrinsicID(g->trap_fn_val));3801 assert(LLVMGetIntrinsicID(builtin_fn->fn_val));
3802
3803 g->trap_fn_val = builtin_fn->fn_val;
3796 }3804 }
3797 {3805 {
3798 BuiltinFnEntry *builtin_fn = create_builtin_fn(g, BuiltinFnIdMemcpy, "memcpy");3806 BuiltinFnEntry *builtin_fn = create_builtin_fn(g, BuiltinFnIdMemcpy, "memcpy");