re PR c++/52974 (Canonicalize include paths in diagnostics)

2012-04-30  Manuel López-Ibáñez  <manu@gcc.gnu.org>
	    Dodji Seketeli  <dodji@seketeli.org>

	PR c++/52974
	* libcpp/files.c (maybe_shorter_path): New.
	(find_file_in_dir): Use it.

Co-Authored-By: Dodji Seketeli <dodji@seketeli.org>

From-SVN: r186991
This commit is contained in:
Manuel López-Ibáñez 2012-04-30 16:57:22 +00:00
parent a7b8107f8e
commit b193dfa899
2 changed files with 41 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2012-04-30 Manuel López-Ibáñez <manu@gcc.gnu.org>
Dodji Seketeli <dodji@seketeli.org>
PR 5297
* libcpp/files.c (maybe_shorter_path): New.
(find_file_in_dir): Use it.
2012-04-30 Dodji Seketeli <dodji@redhat.com>
Switch -ftrack-macro-expansion=2 on by default.

View File

@ -341,6 +341,25 @@ pch_open_file (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch)
return valid;
}
/* Canonicalize the path to FILE. Return the canonical form if it is
shorter, otherwise return NULL. This function does NOT free the
memory pointed by FILE. */
static char *
maybe_shorter_path (const char * file)
{
char * file2 = lrealpath (file);
if (file2 && strlen (file2) < strlen (file))
{
return file2;
}
else
{
free (file2);
return NULL;
}
}
/* Try to open the path FILE->name appended to FILE->dir. This is
where remap and PCH intercept the file lookup process. Return true
if the file was found, whether or not the open was successful.
@ -361,10 +380,24 @@ find_file_in_dir (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch)
if (path)
{
hashval_t hv = htab_hash_string (path);
hashval_t hv;
char *copy;
void **pp;
/* We try to canonicalize system headers. */
if (file->dir->sysp)
{
char * canonical_path = maybe_shorter_path (path);
if (canonical_path)
{
/* The canonical path was newly allocated. Let's free the
non-canonical one. */
free (path);
path = canonical_path;
}
}
hv = htab_hash_string (path);
if (htab_find_with_hash (pfile->nonexistent_file_hash, path, hv) != NULL)
{
file->err_no = ENOENT;