diagnostics: fix ICE on sarif output when source file is unreadable [PR111700]
gcc/ChangeLog: PR driver/111700 * input.cc (file_cache::add_file): Update leading comment to clarify that it can fail. (file_cache::lookup_or_add_file): Likewise. (file_cache::get_source_file_content): Gracefully handle lookup_or_add_file failing. gcc/testsuite/ChangeLog: PR driver/111700 * c-c++-common/diagnostic-format-sarif-file-pr111700.c: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
This commit is contained in:
parent
b4fc1abbd9
commit
94caa6a6b4
2 changed files with 22 additions and 2 deletions
12
gcc/input.cc
12
gcc/input.cc
|
@ -443,7 +443,10 @@ file_cache::evicted_cache_tab_entry (unsigned *highest_use_count)
|
|||
accessed by caret diagnostic. This cache is added to an array of
|
||||
cache and can be retrieved by lookup_file_in_cache_tab. This
|
||||
function returns the created cache. Note that only the last
|
||||
num_file_slots files are cached. */
|
||||
num_file_slots files are cached.
|
||||
|
||||
This can return nullptr if the FILE_PATH can't be opened for
|
||||
reading, or if the content can't be converted to the input_charset. */
|
||||
|
||||
file_cache_slot*
|
||||
file_cache::add_file (const char *file_path)
|
||||
|
@ -547,7 +550,10 @@ file_cache::~file_cache ()
|
|||
/* Lookup the cache used for the content of a given file accessed by
|
||||
caret diagnostic. If no cached file was found, create a new cache
|
||||
for this file, add it to the array of cached file and return
|
||||
it. */
|
||||
it.
|
||||
|
||||
This can return nullptr on a cache miss if FILE_PATH can't be opened for
|
||||
reading, or if the content can't be converted to the input_charset. */
|
||||
|
||||
file_cache_slot*
|
||||
file_cache::lookup_or_add_file (const char *file_path)
|
||||
|
@ -1072,6 +1078,8 @@ char_span
|
|||
file_cache::get_source_file_content (const char *file_path)
|
||||
{
|
||||
file_cache_slot *c = lookup_or_add_file (file_path);
|
||||
if (c == nullptr)
|
||||
return char_span (nullptr, 0);
|
||||
return c->get_full_file_content ();
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-fdiagnostics-format=sarif-file" } */
|
||||
|
||||
# 0 "this-file-does-not-exist.c"
|
||||
#warning message
|
||||
|
||||
/* Verify that some JSON was written to a file with the expected name. */
|
||||
/* { dg-final { verify-sarif-file } } */
|
||||
|
||||
/* ...and that it at least includes the warning
|
||||
{ dg-final { scan-sarif-file "\"message\": " } }
|
||||
{ dg-final { scan-sarif-file "\"text\": \"#warning message" } } */
|
Loading…
Add table
Reference in a new issue