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
This commit is contained in:
parent
4dc0796f75
commit
f5eab47e10
11 changed files with 106 additions and 51 deletions
|
@ -1,3 +1,16 @@
|
|||
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>
|
||||
|
||||
* gfortran.fortran-torture/execute/intrinsic_count.f90:
|
||||
|
|
1
gcc/testsuite/gcc.dg/cpp/inc/pr20348-aux.h
Normal file
1
gcc/testsuite/gcc.dg/cpp/inc/pr20348-aux.h
Normal file
|
@ -0,0 +1 @@
|
|||
#include "pr20348.h"
|
9
gcc/testsuite/gcc.dg/cpp/inc/pr20348.h
Normal file
9
gcc/testsuite/gcc.dg/cpp/inc/pr20348.h
Normal file
|
@ -0,0 +1,9 @@
|
|||
#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
|
1
gcc/testsuite/gcc.dg/cpp/inc/pr20356-aux.h
Normal file
1
gcc/testsuite/gcc.dg/cpp/inc/pr20356-aux.h
Normal file
|
@ -0,0 +1 @@
|
|||
#include "pr20356.h"
|
6
gcc/testsuite/gcc.dg/cpp/inc/pr20356.h
Normal file
6
gcc/testsuite/gcc.dg/cpp/inc/pr20356.h
Normal file
|
@ -0,0 +1,6 @@
|
|||
#ifndef INC_PR20356_H
|
||||
# define INC_PR20356_H
|
||||
#endif
|
||||
#ifndef PR20356_H
|
||||
# include_next <pr20356.h>
|
||||
#endif
|
16
gcc/testsuite/gcc.dg/cpp/pr20348.c
Normal file
16
gcc/testsuite/gcc.dg/cpp/pr20348.c
Normal file
|
@ -0,0 +1,16 @@
|
|||
/* 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;
|
9
gcc/testsuite/gcc.dg/cpp/pr20348.h
Normal file
9
gcc/testsuite/gcc.dg/cpp/pr20348.h
Normal file
|
@ -0,0 +1,9 @@
|
|||
#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
|
14
gcc/testsuite/gcc.dg/cpp/pr20356.c
Normal file
14
gcc/testsuite/gcc.dg/cpp/pr20356.c
Normal file
|
@ -0,0 +1,14 @@
|
|||
/* 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;
|
5
gcc/testsuite/gcc.dg/cpp/pr20356.h
Normal file
5
gcc/testsuite/gcc.dg/cpp/pr20356.h
Normal file
|
@ -0,0 +1,5 @@
|
|||
#ifndef PR20356_H
|
||||
# define PR20356_H
|
||||
#else
|
||||
# include_next <pr20356.h>
|
||||
#endif
|
|
@ -1,3 +1,10 @@
|
|||
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>
|
||||
|
||||
* 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
|
|||
/* Try each path in the include chain. */
|
||||
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))
|
||||
break;
|
||||
|
||||
|
@ -459,40 +444,33 @@ _cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool f
|
|||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/* Only check the cache for the starting location (done above)
|
||||
and the quote and bracket chain heads because there are no
|
||||
other possible starting points for searches. */
|
||||
if (file->dir != pfile->bracket_include
|
||||
&& file->dir != pfile->quote_include)
|
||||
continue;
|
||||
|
||||
entry = search_cache (*hash_slot, file->dir);
|
||||
if (entry)
|
||||
break;
|
||||
}
|
||||
|
||||
/* This is a new file; put it in the list. */
|
||||
file->next_file = pfile->all_files;
|
||||
pfile->all_files = file;
|
||||
|
||||
/* If this file was found in the directory-of-the-current-file,
|
||||
check whether that directory is reachable via one of the normal
|
||||
search paths. If so, we must record this entry as being
|
||||
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)
|
||||
if (entry)
|
||||
{
|
||||
cpp_dir *d;
|
||||
cpp_dir *proper_start_dir = pfile->quote_include;
|
||||
|
||||
for (d = proper_start_dir;; d = d->next)
|
||||
{
|
||||
if (d == pfile->bracket_include)
|
||||
proper_start_dir = d;
|
||||
if (d == 0)
|
||||
{
|
||||
proper_start_dir = 0;
|
||||
break;
|
||||
}
|
||||
/* file->dir->name will have a trailing slash. */
|
||||
if (!strncmp (d->name, file->dir->name, file->dir->len - 1))
|
||||
break;
|
||||
}
|
||||
if (proper_start_dir)
|
||||
start_dir = proper_start_dir;
|
||||
/* Cache for START_DIR too, sharing the _cpp_file structure. */
|
||||
free ((char *) file->name);
|
||||
free (file);
|
||||
file = entry->u.file;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* This is a new file; put it in the list. */
|
||||
file->next_file = pfile->all_files;
|
||||
pfile->all_files = file;
|
||||
}
|
||||
|
||||
found:
|
||||
/* Store this new result in the hash table. */
|
||||
entry = new_file_hash_entry (pfile);
|
||||
entry->next = *hash_slot;
|
||||
|
@ -880,14 +858,10 @@ open_file_failed (cpp_reader *pfile, _cpp_file *file)
|
|||
static struct file_hash_entry *
|
||||
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
|
||||
given location. */
|
||||
for (p = head; p; p = p->next)
|
||||
if (p->start_dir == start_dir)
|
||||
return p;
|
||||
return 0;
|
||||
return head;
|
||||
}
|
||||
|
||||
/* Allocate a new _cpp_file structure. */
|
||||
|
|
Loading…
Add table
Reference in a new issue