Commit f5eab47e by Jakub Jelinek Committed by Jakub Jelinek

re PR preprocessor/20348 (File not included when file with same name is included before)

	PR preprocessor/20348
	PR preprocessor/20356
	* files.c (_cpp_find_file, search_cache): Revert 2004-06-26 and
	2004-06-05 changes.

	* gcc.dg/cpp/pr20348.c: New test.
	* gcc.dg/cpp/pr20348.h: New file.
	* gcc.dg/cpp/inc/pr20348.h: New file.
	* gcc.dg/cpp/inc/pr20348-aux.h: New file.
	* gcc.dg/cpp/pr20356.c: New test.
	* gcc.dg/cpp/pr20356.h: New file.
	* gcc.dg/cpp/inc/pr20356.h: New file.
	* gcc.dg/cpp/inc/pr20356-aux.h: New file.

From-SVN: r103629
parent 4dc0796f
2005-08-30 Jakub Jelinek <jakub@redhat.com>
PR preprocessor/20348
PR preprocessor/20356
* gcc.dg/cpp/pr20348.c: New test.
* gcc.dg/cpp/pr20348.h: New file.
* gcc.dg/cpp/inc/pr20348.h: New file.
* gcc.dg/cpp/inc/pr20348-aux.h: New file.
* gcc.dg/cpp/pr20356.c: New test.
* gcc.dg/cpp/pr20356.h: New file.
* gcc.dg/cpp/inc/pr20356.h: New file.
* gcc.dg/cpp/inc/pr20356-aux.h: New file.
2005-08-29 Jerry DeLisle <jvdelisle@verizon.net> 2005-08-29 Jerry DeLisle <jvdelisle@verizon.net>
* gfortran.fortran-torture/execute/intrinsic_count.f90: * gfortran.fortran-torture/execute/intrinsic_count.f90:
......
#ifndef MIDDLE
# ifndef INC_PR20348_H_SEEN
# define INC_PR20348_H_SEEN
# else
# error inc/pr20348.h included twice before MIDDLE definition
# endif
#else
# error inc/pr20348.h included after MIDDLE definition
#endif
#ifndef INC_PR20356_H
# define INC_PR20356_H
#endif
#ifndef PR20356_H
# include_next <pr20356.h>
#endif
/* PR preprocessor/20348 */
/* { dg-do compile } */
/* { dg-options "-I$srcdir/gcc.dg/cpp -I$srcdir/gcc.dg/cpp/inc" } */
#include <pr20348-aux.h>
#define MIDDLE
#include <pr20348.h>
#ifndef PR20348_H_SEEN
# error pr20348.h not included after MIDDLE definition
#endif
#ifndef INC_PR20348_H_SEEN
# error inc/pr20348.h not included before MIDDLE definition
#endif
int i;
#ifdef MIDDLE
# ifndef PR20348_H_SEEN
# define PR20348_H_SEEN
# else
# error pr20348.h included twice after MIDDLE definition
# endif
#else
# error pr20348.h included before MIDDLE definition
#endif
/* PR preprocessor/20356 */
/* { dg-do compile } */
/* { dg-options "-I$srcdir/gcc.dg/cpp -I$srcdir/gcc.dg/cpp/inc" } */
#include <pr20356-aux.h>
#ifndef PR20356_H
# error PR20356_H not defined
#endif
#ifndef INC_PR20356_H
# error INC_PR20356_H not defined
#endif
int i;
#ifndef PR20356_H
# define PR20356_H
#else
# include_next <pr20356.h>
#endif
2005-08-30 Jakub Jelinek <jakub@redhat.com>
PR preprocessor/20348
PR preprocessor/20356
* files.c (_cpp_find_file, search_cache): Revert 2004-06-26 and
2004-06-05 changes.
2005-07-23 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 2005-07-23 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* configure.ac (ACX_PROG_CC_WARNING_OPTS): add * configure.ac (ACX_PROG_CC_WARNING_OPTS): add
......
...@@ -416,21 +416,6 @@ _cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool f ...@@ -416,21 +416,6 @@ _cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool f
/* Try each path in the include chain. */ /* Try each path in the include chain. */
for (; !fake ;) for (; !fake ;)
{ {
if (file->dir == pfile->quote_include
|| file->dir == pfile->bracket_include)
{
entry = search_cache (*hash_slot, file->dir);
if (entry)
{
/* Found the same file again. Record it as reachable
from this position, too. */
free ((char *) file->name);
free (file);
file = entry->u.file;
goto found;
}
}
if (find_file_in_dir (pfile, file, &invalid_pch)) if (find_file_in_dir (pfile, file, &invalid_pch))
break; break;
...@@ -459,40 +444,33 @@ _cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool f ...@@ -459,40 +444,33 @@ _cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool f
} }
break; break;
} }
}
/* This is a new file; put it in the list. */ /* Only check the cache for the starting location (done above)
file->next_file = pfile->all_files; and the quote and bracket chain heads because there are no
pfile->all_files = file; other possible starting points for searches. */
if (file->dir != pfile->bracket_include
&& file->dir != pfile->quote_include)
continue;
/* If this file was found in the directory-of-the-current-file, entry = search_cache (*hash_slot, file->dir);
check whether that directory is reachable via one of the normal if (entry)
search paths. If so, we must record this entry as being break;
reachable that way, otherwise we will mistakenly reprocess this }
file if it is included later from the normal search path. */
if (file->dir && start_dir->next == pfile->quote_include)
{
cpp_dir *d;
cpp_dir *proper_start_dir = pfile->quote_include;
for (d = proper_start_dir;; d = d->next) if (entry)
{ {
if (d == pfile->bracket_include) /* Cache for START_DIR too, sharing the _cpp_file structure. */
proper_start_dir = d; free ((char *) file->name);
if (d == 0) free (file);
{ file = entry->u.file;
proper_start_dir = 0; }
break; else
} {
/* file->dir->name will have a trailing slash. */ /* This is a new file; put it in the list. */
if (!strncmp (d->name, file->dir->name, file->dir->len - 1)) file->next_file = pfile->all_files;
break; pfile->all_files = file;
}
if (proper_start_dir)
start_dir = proper_start_dir;
} }
found:
/* Store this new result in the hash table. */ /* Store this new result in the hash table. */
entry = new_file_hash_entry (pfile); entry = new_file_hash_entry (pfile);
entry->next = *hash_slot; entry->next = *hash_slot;
...@@ -880,14 +858,10 @@ open_file_failed (cpp_reader *pfile, _cpp_file *file) ...@@ -880,14 +858,10 @@ open_file_failed (cpp_reader *pfile, _cpp_file *file)
static struct file_hash_entry * static struct file_hash_entry *
search_cache (struct file_hash_entry *head, const cpp_dir *start_dir) search_cache (struct file_hash_entry *head, const cpp_dir *start_dir)
{ {
struct file_hash_entry *p; while (head && head->start_dir != start_dir)
head = head->next;
/* Look for a file that was found from a search starting at the return head;
given location. */
for (p = head; p; p = p->next)
if (p->start_dir == start_dir)
return p;
return 0;
} }
/* Allocate a new _cpp_file structure. */ /* Allocate a new _cpp_file structure. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment