Skip to content
Snippets Groups Projects
Commit 385a2322 authored by David Malcolm's avatar David Malcolm
Browse files

diagnostics: bulletproof opening of SARIF output [PR116978]


Introduce a new RAII class diagnostic_output_file to track ownership
of the FILE * for SARIF output.

In particular, the .sarif file is now opened immediately, rather
than at the end of the compile, and so will fail earlier if the
file can't be opened.

Doing so fixes a couple of ICEs in -fdiagnostics-format=sarif-file when
invoking, say, cc1 directly, rather than from the driver.

gcc/ChangeLog:
	PR other/116978
	* diagnostic-format-sarif.cc (sarif_builder::sarif_builder):
	Gracefully handle "main_input_filename_" being NULL.
	(sarif_output_format::sarif_output_format): Replace param
	"base_file_name" with "output_file" and assert that the file
	was opened successfully and has a non-NULL filename.
	(sarif_output_format::~sarif_file_output_format): Move
	responsibility for building the filename and opening the file from
	here to the creator of the instance.
	(sarif_output_format::m_base_file_name): Replace with...
	(sarif_output_format::m_output_file): ...this.
	(diagnostic_output_format_init_sarif_file): Make "line_maps" param
	non-const.  Gracefully handle "base_file_name" being NULL.
	Construct the filename and open the file here, rather than in
	~sarif_file_output_format, and handle failures immediately here,
	rather than at the end of the compile.
	* diagnostic-format-sarif.h: Include "diagnostic-output-file.h".
	(diagnostic_output_format_init_sarif_file): Make "line_maps" param
	non-const.
	* diagnostic-output-file.h: New file.
	* diagnostic.cc (diagnostic_context::emit_diagnostic): New.
	(diagnostic_context::emit_diagnostic_va): New.
	* diagnostic.h (diagnostic_context::emit_diagnostic): New decl.
	(diagnostic_context::emit_diagnostic_va): New decl.

Signed-off-by: default avatarDavid Malcolm <dmalcolm@redhat.com>
parent 7d2845da
No related branches found
No related tags found
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment