X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=ast.c;h=cab7def717497be12e371098091be640b73b6762;hb=d70fcdec42459536cc032170bf63973b976cc52c;hp=9a1fbe3f3960ecbff3dc1505e3579938445368e9;hpb=24f9b634759db31d46262fbbc8245558f781129d;p=xonotic%2Fgmqcc.git diff --git a/ast.c b/ast.c index 9a1fbe3..cab7def 100644 --- a/ast.c +++ b/ast.c @@ -1150,7 +1150,7 @@ bool ast_global_codegen(ast_value *self, ir_builder *ir, bool isfield) v = ir_builder_create_field(ir, self->name, vtype); if (!v) { - asterror(ast_ctx(self), "ir_builder_create_global failed"); + asterror(ast_ctx(self), "ir_builder_create_global failed on `%s`", self->name); return false; } if (vtype == TYPE_FIELD) @@ -1169,7 +1169,7 @@ bool ast_global_codegen(ast_value *self, ir_builder *ir, bool isfield) array->ir_values[ai] = ir_builder_create_field(ir, name, vtype); if (!array->ir_values[ai]) { mem_d(name); - asterror(ast_ctx(self), "ir_builder_create_global failed"); + asterror(ast_ctx(self), "ir_builder_create_global failed on `%s`", name); return false; } if (vtype == TYPE_FIELD) @@ -1203,7 +1203,7 @@ bool ast_global_codegen(ast_value *self, ir_builder *ir, bool isfield) v = ir_builder_create_global(ir, self->name, vtype); if (!v) { - asterror(ast_ctx(self), "ir_builder_create_global failed"); + asterror(ast_ctx(self), "ir_builder_create_global failed `%s`", self->name); return false; } if (vtype == TYPE_FIELD) @@ -1221,7 +1221,7 @@ bool ast_global_codegen(ast_value *self, ir_builder *ir, bool isfield) self->ir_values[ai] = ir_builder_create_global(ir, name, vtype); if (!self->ir_values[ai]) { mem_d(name); - asterror(ast_ctx(self), "ir_builder_create_global failed"); + asterror(ast_ctx(self), "ir_builder_create_global failed `%s`", name); return false; } if (vtype == TYPE_FIELD) @@ -1237,7 +1237,7 @@ bool ast_global_codegen(ast_value *self, ir_builder *ir, bool isfield) */ v = ir_builder_create_global(ir, self->name, self->expression.vtype); if (!v) { - asterror(ast_ctx(self), "ir_builder_create_global failed"); + asterror(ast_ctx(self), "ir_builder_create_global failed on `%s`", self->name); return false; } if (self->expression.vtype == TYPE_FIELD) @@ -1337,7 +1337,7 @@ bool ast_local_codegen(ast_value *self, ir_function *func, bool param) snprintf(name + namelen, 16, "[%u]", (unsigned int)ai); self->ir_values[ai] = ir_function_create_local(func, name, vtype, param); if (!self->ir_values[ai]) { - asterror(ast_ctx(self), "ir_builder_create_global failed"); + asterror(ast_ctx(self), "ir_builder_create_global failed on `%s`", name); return false; } if (vtype == TYPE_FIELD) @@ -1516,7 +1516,7 @@ bool ast_block_codegen(ast_block *self, ast_function *func, bool lvalue, ir_valu for (i = 0; i < vec_size(self->exprs); ++i) { ast_expression_codegen *gen = self->exprs[i]->expression.codegen; - if (func->curblock->final) { + if (func->curblock->final && !ast_istype(self->exprs[i], ast_label)) { asterror(ast_ctx(self->exprs[i]), "unreachable statement"); return false; } @@ -2045,7 +2045,7 @@ bool ast_array_index_codegen(ast_array_index *self, ast_function *func, bool lva } cgen = self->index->expression.codegen; - if (!(*cgen)((ast_expression*)(self->index), func, true, &iridx)) + if (!(*cgen)((ast_expression*)(self->index), func, false, &iridx)) return false; cgen = arr->getter->expression.codegen;