aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2019-01-04 10:19:39 +0000
committergingerBill <bill@gingerbill.org>2019-01-04 10:19:39 +0000
commitbb93a8b131e58b9f897be08fb88f662ade7e34fe (patch)
treea68485e436545b1fe4901a57ba063c8141eccbd7
parent5bfe5ad82e7236bd805f888934f5bdc3e768050b (diff)
Fix TODO ParameterValue_Location
-rw-r--r--src/ir.cpp3
-rw-r--r--src/ir_print.cpp22
2 files changed, 13 insertions, 12 deletions
diff --git a/src/ir.cpp b/src/ir.cpp
index a8b2e77c3..604e61d4b 100644
--- a/src/ir.cpp
+++ b/src/ir.cpp
@@ -6441,8 +6441,7 @@ irValue *ir_build_expr_internal(irProcedure *proc, Ast *expr) {
args[i] = ir_value_nil(e->type);
break;
case ParameterValue_Location:
- // args[i] =
- GB_PANIC("TODO ParameterValue_Location");
+ args[i] = ir_emit_source_code_location(proc, proc->entity->token.string, ast_token(expr).pos);
break;
case ParameterValue_Value:
args[i] = ir_build_expr(proc, e->Variable.param_value.ast_value);
diff --git a/src/ir_print.cpp b/src/ir_print.cpp
index 3da15607c..40325ae9f 100644
--- a/src/ir_print.cpp
+++ b/src/ir_print.cpp
@@ -1888,17 +1888,19 @@ void ir_print_instr(irFileBuffer *f, irModule *m, irValue *value) {
TokenPos pos = e->token.pos;
irDebugInfo **lookup_di = map_get(&m->debug_info, hash_entity(e));
- GB_ASSERT_NOT_NULL(*lookup_di);
- irDebugInfo* local_var_di = *lookup_di;
+ if (lookup_di != nullptr) {
+ GB_ASSERT_NOT_NULL(*lookup_di);
+ irDebugInfo* local_var_di = *lookup_di;
- ir_write_str_lit(f, "call void @llvm.dbg.declare(");
- ir_write_str_lit(f, "metadata ");
- ir_print_type(f, m, vt);
- ir_write_byte(f, ' ');
- ir_print_value(f, m, dd->value, vt);
- ir_fprintf(f, ", metadata !%d", local_var_di->id);
- ir_write_str_lit(f, ", metadata !DIExpression())");
- ir_print_debug_location(f, m, value);
+ ir_write_str_lit(f, "call void @llvm.dbg.declare(");
+ ir_write_str_lit(f, "metadata ");
+ ir_print_type(f, m, vt);
+ ir_write_byte(f, ' ');
+ ir_print_value(f, m, dd->value, vt);
+ ir_fprintf(f, ", metadata !%d", local_var_di->id);
+ ir_write_str_lit(f, ", metadata !DIExpression())");
+ ir_print_debug_location(f, m, value);
+ }
break;
}
}