authorgravatar for timonkruiper@gmail.comTimon Kruiper <timonkruiper@gmail.com> 2019-10-24 15:57:34+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-10-26 13:09:23-04:00
logd04c58816d673208aae476e1cc2d223a26604c45
tree811e4ea21d153843b9916f984c3cb81e1f250b25
parent05fd59e06a1795828ffdd98c3b2b6c4428d339ea

Translate-c: Fix a segfault when to many errors are emitted

This was already fixed when doing `@cImport`, but not yet when running `zig translate-c`.

1 files changed, 10 insertions(+), 6 deletions(-)

src/codegen.cpp+10-6
...@@ -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 }