| ... | ... | @@ -513,6 +513,8 @@ static LLVMValueRef gen_builtin_fn_call_expr(CodeGen *g, AstNode *node) { |
| 513 | 513 | return nullptr; |
| 514 | 514 | case BuiltinFnIdErrName: |
| 515 | 515 | return gen_err_name(g, node); |
| 516 | case BuiltinFnIdBreakpoint: |
| 517 | return LLVMBuildCall(g->builder, g->trap_fn_val, nullptr, 0, ""); |
| 516 | 518 | } |
| 517 | 519 | zig_unreachable(); |
| 518 | 520 | } |
| ... | ... | @@ -3790,9 +3792,15 @@ static BuiltinFnEntry *create_builtin_fn_with_arg_count(CodeGen *g, BuiltinFnId |
| 3790 | 3792 | |
| 3791 | 3793 | static 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 | 3799 | LLVMTypeRef fn_type = LLVMFunctionType(LLVMVoidType(), nullptr, 0, false); |
| 3794 | | g->trap_fn_val = LLVMAddFunction(g->module, "llvm.debugtrap", fn_type); |
| 3795 | | assert(LLVMGetIntrinsicID(g->trap_fn_val)); |
| 3800 | builtin_fn->fn_val = LLVMAddFunction(g->module, "llvm.debugtrap", fn_type); |
| 3801 | assert(LLVMGetIntrinsicID(builtin_fn->fn_val)); |
| 3802 | |
| 3803 | g->trap_fn_val = builtin_fn->fn_val; |
| 3796 | 3804 | } |
| 3797 | 3805 | { |
| 3798 | 3806 | BuiltinFnEntry *builtin_fn = create_builtin_fn(g, BuiltinFnIdMemcpy, "memcpy"); |