| author | |
| committer | |
| log | cb6bc5bdb5a3ebc95b0ee5fa414c4a2d4449e172 |
| tree | b1db09ec9d0e5be585ccd93da6431c965a3cbb94 |
| parent | 57b78fff7366c134bfb56084ec353006a7cb39fc |
| signature | Signed by PGP key 4AEE18F83AFDEB23 |
4 files changed, 21 insertions(+), 12 deletions(-)
src/analyze.cpp+4-3| ... | ... | @@ -9418,15 +9418,16 @@ ZigLLVMDIType *get_llvm_di_type(CodeGen *g, ZigType *type) { |
| 9418 | 9418 | return type->llvm_di_type; |
| 9419 | 9419 | } |
| 9420 | 9420 | |
| 9421 | void src_assert(bool ok, AstNode *source_node) { | |
| 9421 | void src_assert_impl(bool ok, AstNode *source_node, char const *file, unsigned int line) { | |
| 9422 | 9422 | if (ok) return; |
| 9423 | 9423 | if (source_node == nullptr) { |
| 9424 | fprintf(stderr, "when analyzing (unknown source location): "); | |
| 9424 | fprintf(stderr, "when analyzing (unknown source location) "); | |
| 9425 | 9425 | } else { |
| 9426 | fprintf(stderr, "when analyzing %s:%u:%u: ", | |
| 9426 | fprintf(stderr, "when analyzing %s:%u:%u ", | |
| 9427 | 9427 | buf_ptr(source_node->owner->data.structure.root_struct->path), |
| 9428 | 9428 | (unsigned)source_node->line + 1, (unsigned)source_node->column + 1); |
| 9429 | 9429 | } |
| 9430 | fprintf(stderr, "in compiler source at %s:%u: ", file, line); | |
| 9430 | 9431 | const char *msg = "assertion failed. This is a bug in the Zig compiler."; |
| 9431 | 9432 | stage2_panic(msg, strlen(msg)); |
| 9432 | 9433 | } |
src/analyze.hpp+4-1| ... | ... | @@ -260,7 +260,7 @@ ZigLLVMDIType *get_llvm_di_type(CodeGen *g, ZigType *type); |
| 260 | 260 | void add_cc_args(CodeGen *g, ZigList<const char *> &args, const char *out_dep_path, bool translate_c, |
| 261 | 261 | FileExt source_kind); |
| 262 | 262 | |
| 263 | void src_assert(bool ok, AstNode *source_node); | |
| 263 | void src_assert_impl(bool ok, AstNode *source_node, const char *file, unsigned int line); | |
| 264 | 264 | bool is_container(ZigType *type_entry); |
| 265 | 265 | ZigValue *analyze_const_value(CodeGen *g, Scope *scope, AstNode *node, ZigType *type_entry, |
| 266 | 266 | Buf *type_name, UndefAllowed undef); |
| ... | ... | @@ -290,4 +290,7 @@ bool type_has_optional_repr(ZigType *ty); |
| 290 | 290 | bool is_opt_err_set(ZigType *ty); |
| 291 | 291 | bool type_is_numeric(ZigType *ty); |
| 292 | 292 | const char *float_op_to_name(BuiltinFnId op); |
| 293 | ||
| 294 | #define src_assert(OK, SOURCE_NODE) src_assert_impl((OK), (SOURCE_NODE), __FILE__, __LINE__) | |
| 295 | ||
| 293 | 296 | #endif |
src/codegen.cpp+4-2| ... | ... | @@ -870,11 +870,13 @@ static LLVMValueRef get_handle_value(CodeGen *g, LLVMValueRef ptr, ZigType *type |
| 870 | 870 | } |
| 871 | 871 | } |
| 872 | 872 | |
| 873 | static void ir_assert(bool ok, IrInstGen *source_instruction) { | |
| 873 | static void ir_assert_impl(bool ok, IrInstGen *source_instruction, const char *file, unsigned int line) { | |
| 874 | 874 | if (ok) return; |
| 875 | src_assert(ok, source_instruction->base.source_node); | |
| 875 | src_assert_impl(ok, source_instruction->base.source_node, file, line); | |
| 876 | 876 | } |
| 877 | 877 | |
| 878 | #define ir_assert(OK, SOURCE_INSTRUCTION) ir_assert_impl((OK), (SOURCE_INSTRUCTION), __FILE__, __LINE__) | |
| 879 | ||
| 878 | 880 | static bool ir_want_fast_math(CodeGen *g, IrInstGen *instruction) { |
| 879 | 881 | // TODO memoize |
| 880 | 882 | Scope *scope = instruction->base.scope; |
src/ir.cpp+9-6| ... | ... | @@ -224,8 +224,8 @@ static ErrorMsg *exec_add_error_node(CodeGen *codegen, IrExecutableSrc *exec, As |
| 224 | 224 | static IrInstGen *ir_analyze_container_field_ptr(IrAnalyze *ira, Buf *field_name, |
| 225 | 225 | IrInst* source_instr, IrInstGen *container_ptr, IrInst *container_ptr_src, |
| 226 | 226 | ZigType *container_type, bool initializing); |
| 227 | static void ir_assert(bool ok, IrInst* source_instruction); | |
| 228 | static void ir_assert_gen(bool ok, IrInstGen *source_instruction); | |
| 227 | static void ir_assert_impl(bool ok, IrInst* source_instruction, const char *file, unsigned int line); | |
| 228 | static void ir_assert_gen_impl(bool ok, IrInstGen *source_instruction, const char *file, unsigned int line); | |
| 229 | 229 | static IrInstGen *ir_get_var_ptr(IrAnalyze *ira, IrInst *source_instr, ZigVar *var); |
| 230 | 230 | static ZigType *ir_resolve_atomic_operand_type(IrAnalyze *ira, IrInstGen *op); |
| 231 | 231 | static IrInstSrc *ir_lval_wrap(IrBuilderSrc *irb, Scope *scope, IrInstSrc *value, LVal lval, ResultLoc *result_loc); |
| ... | ... | @@ -286,6 +286,9 @@ static IrInstGen *ir_analyze_struct_value_field_value(IrAnalyze *ira, IrInst* so |
| 286 | 286 | static bool value_cmp_numeric_val_any(ZigValue *left, Cmp predicate, ZigValue *right); |
| 287 | 287 | static bool value_cmp_numeric_val_all(ZigValue *left, Cmp predicate, ZigValue *right); |
| 288 | 288 | |
| 289 | #define ir_assert(OK, SOURCE_INSTRUCTION) ir_assert_impl((OK), (SOURCE_INSTRUCTION), __FILE__, __LINE__) | |
| 290 | #define ir_assert_gen(OK, SOURCE_INSTRUCTION) ir_assert_gen_impl((OK), (SOURCE_INSTRUCTION), __FILE__, __LINE__) | |
| 291 | ||
| 289 | 292 | static void destroy_instruction_src(IrInstSrc *inst) { |
| 290 | 293 | switch (inst->id) { |
| 291 | 294 | case IrInstSrcIdInvalid: |
| ... | ... | @@ -10316,14 +10319,14 @@ static ErrorMsg *ir_add_error(IrAnalyze *ira, IrInst *source_instruction, Buf *m |
| 10316 | 10319 | return ir_add_error_node(ira, source_instruction->source_node, msg); |
| 10317 | 10320 | } |
| 10318 | 10321 | |
| 10319 | static void ir_assert(bool ok, IrInst *source_instruction) { | |
| 10322 | static void ir_assert_impl(bool ok, IrInst *source_instruction, char const *file, unsigned int line) { | |
| 10320 | 10323 | if (ok) return; |
| 10321 | src_assert(ok, source_instruction->source_node); | |
| 10324 | src_assert_impl(ok, source_instruction->source_node, file, line); | |
| 10322 | 10325 | } |
| 10323 | 10326 | |
| 10324 | static void ir_assert_gen(bool ok, IrInstGen *source_instruction) { | |
| 10327 | static void ir_assert_gen_impl(bool ok, IrInstGen *source_instruction, char const *file, unsigned int line) { | |
| 10325 | 10328 | if (ok) return; |
| 10326 | src_assert(ok, source_instruction->base.source_node); | |
| 10329 | src_assert_impl(ok, source_instruction->base.source_node, file, line); | |
| 10327 | 10330 | } |
| 10328 | 10331 | |
| 10329 | 10332 | // This function takes a comptime ptr and makes the child const value conform to the type |