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
88948894 if (err == ErrorCCompileErrors && errors_len > 0) {
88958895 for (size_t i = 0; i < errors_len; i += 1) {
88968896 Stage2ErrorMsg *clang_err = &errors_ptr[i];
8897 ErrorMsg *err_msg = err_msg_create_with_offset(
8898 clang_err->filename_ptr ?
8899 buf_create_from_mem(clang_err->filename_ptr, clang_err->filename_len) : buf_alloc(),
8900 clang_err->line, clang_err->column, clang_err->offset, clang_err->source,
8901 buf_create_from_mem(clang_err->msg_ptr, clang_err->msg_len));
8902 print_err_msg(err_msg, g->err_color);
8897
8898 // Clang can emit "too many errors, stopping now", in which case `source` and `filename_ptr` are null
8899 if (clang_err->source && clang_err->filename_ptr) {
8900 ErrorMsg *err_msg = err_msg_create_with_offset(
8901 clang_err->filename_ptr ?
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 }
89038907 }
89048908 exit(1);
89058909 }