| ... | @@ -8894,12 +8894,16 @@ void codegen_translate_c(CodeGen *g, Buf *full_path, FILE *out_file, bool use_us | ... | @@ -8894,12 +8894,16 @@ void codegen_translate_c(CodeGen *g, Buf *full_path, FILE *out_file, bool use_us |
| 8894 | if (err == ErrorCCompileErrors && errors_len > 0) { | 8894 | if (err == ErrorCCompileErrors && errors_len > 0) { |
| 8895 | for (size_t i = 0; i < errors_len; i += 1) { | 8895 | for (size_t i = 0; i < errors_len; i += 1) { |
| 8896 | Stage2ErrorMsg *clang_err = &errors_ptr[i]; | 8896 | Stage2ErrorMsg *clang_err = &errors_ptr[i]; |
| 8897 | ErrorMsg *err_msg = err_msg_create_with_offset( | 8897 | |
| 8898 | clang_err->filename_ptr ? | 8898 | // Clang can emit "too many errors, stopping now", in which case `source` and `filename_ptr` are null |
| 8899 | buf_create_from_mem(clang_err->filename_ptr, clang_err->filename_len) : buf_alloc(), | 8899 | if (clang_err->source && clang_err->filename_ptr) { |
| 8900 | clang_err->line, clang_err->column, clang_err->offset, clang_err->source, | 8900 | ErrorMsg *err_msg = err_msg_create_with_offset( |
| 8901 | buf_create_from_mem(clang_err->msg_ptr, clang_err->msg_len)); | 8901 | clang_err->filename_ptr ? |
| 8902 | print_err_msg(err_msg, g->err_color); | 8902 | buf_create_from_mem(clang_err->filename_ptr, clang_err->filename_len) : buf_alloc(), |
| | 8903 | clang_err->line, clang_err->column, clang_err->offset, clang_err->source, |
| | 8904 | buf_create_from_mem(clang_err->msg_ptr, clang_err->msg_len)); |
| | 8905 | print_err_msg(err_msg, g->err_color); |
| | 8906 | } |
| 8903 | } | 8907 | } |
| 8904 | exit(1); | 8908 | exit(1); |
| 8905 | } | 8909 | } |