From d04c58816d673208aae476e1cc2d223a26604c45 Mon Sep 17 00:00:00 2001 From: Timon Kruiper Date: Thu, 24 Oct 2019 15:57:34 +0200 Subject: [PATCH] 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`. --- src/codegen.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/codegen.cpp b/src/codegen.cpp index 18d758ca5e..d56c53ff28 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -8894,12 +8894,16 @@ void codegen_translate_c(CodeGen *g, Buf *full_path, FILE *out_file, bool use_us if (err == ErrorCCompileErrors && errors_len > 0) { for (size_t i = 0; i < errors_len; i += 1) { Stage2ErrorMsg *clang_err = &errors_ptr[i]; - ErrorMsg *err_msg = err_msg_create_with_offset( - clang_err->filename_ptr ? - buf_create_from_mem(clang_err->filename_ptr, clang_err->filename_len) : buf_alloc(), - clang_err->line, clang_err->column, clang_err->offset, clang_err->source, - buf_create_from_mem(clang_err->msg_ptr, clang_err->msg_len)); - print_err_msg(err_msg, g->err_color); + + // Clang can emit "too many errors, stopping now", in which case `source` and `filename_ptr` are null + if (clang_err->source && clang_err->filename_ptr) { + ErrorMsg *err_msg = err_msg_create_with_offset( + clang_err->filename_ptr ? + buf_create_from_mem(clang_err->filename_ptr, clang_err->filename_len) : buf_alloc(), + clang_err->line, clang_err->column, clang_err->offset, clang_err->source, + buf_create_from_mem(clang_err->msg_ptr, clang_err->msg_len)); + print_err_msg(err_msg, g->err_color); + } } exit(1); }