re PR pch/13675 (#including a precompiled header more than once in the same unit fails)

PR pch/13675
	* files.c (struct _cpp_file): Remove pch field.
	(pch_open_file): Don't set file->pch, just file->pchname.
	(should_stack_file): After pfile->cb.read_pch call
	free pchname and clear pchname, don't close file->fd.
	Test file->pchname instead of file->pch.  Don't close fd after cb.
	(_cpp_stack_include): Test file->pchname instead of file->pch.

	* c-pch.c (c_common_read_pch): On error close (fd) resp. fclose (f).

From-SVN: r133790
This commit is contained in:
Jakub Jelinek 2008-04-01 12:58:02 +02:00 committed by Jakub Jelinek
parent 764a79eda2
commit d4c32e1d76
4 changed files with 27 additions and 11 deletions

View File

@ -1,3 +1,8 @@
2008-04-01 Jakub Jelinek <jakub@redhat.com>
PR pch/13675
* c-pch.c (c_common_read_pch): On error close (fd) resp. fclose (f).
2008-04-01 Rafael Espindola <espindola@google.com>
* tree-vrp.c (extract_code_and_val_from_cond_with_ops): New.

View File

@ -373,6 +373,7 @@ c_common_read_pch (cpp_reader *pfile, const char *name,
if (f == NULL)
{
cpp_errno (pfile, CPP_DL_ERROR, "calling fdopen");
close (fd);
return;
}
@ -381,6 +382,7 @@ c_common_read_pch (cpp_reader *pfile, const char *name,
if (fread (&h, sizeof (h), 1, f) != 1)
{
cpp_errno (pfile, CPP_DL_ERROR, "reading");
fclose (f);
return;
}
@ -417,7 +419,10 @@ c_common_read_pch (cpp_reader *pfile, const char *name,
gt_pch_restore (f);
if (cpp_read_state (pfile, name, f, smd) != 0)
{
fclose (f);
return;
}
fclose (f);

View File

@ -1,3 +1,13 @@
2008-04-01 Jakub Jelinek <jakub@redhat.com>
PR pch/13675
* files.c (struct _cpp_file): Remove pch field.
(pch_open_file): Don't set file->pch, just file->pchname.
(should_stack_file): After pfile->cb.read_pch call
free pchname and clear pchname, don't close file->fd.
Test file->pchname instead of file->pch. Don't close fd after cb.
(_cpp_stack_include): Test file->pchname instead of file->pch.
2008-03-28 Tom Tromey <tromey@redhat.com>
* Makefile.in (POSTCOMPILE): New variable.

View File

@ -1,6 +1,6 @@
/* Part of CPP library. File handling.
Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
Free Software Foundation, Inc.
Written by Per Bothner, 1994.
Based on CCCP program by Paul Rubin, June 1986
@ -106,9 +106,6 @@ struct _cpp_file
/* If BUFFER above contains the true contents of the file. */
bool buffer_valid;
/* File is a PCH (on return from find_include_file). */
bool pch;
};
/* A singly-linked list for all searches for a given file name, with
@ -322,9 +319,7 @@ pch_open_file (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch)
}
closedir (pchdir);
}
if (valid)
file->pch = true;
else
if (!valid)
*invalid_pch = true;
}
@ -703,11 +698,12 @@ should_stack_file (cpp_reader *pfile, _cpp_file *file, bool import)
return false;
/* Handle PCH files immediately; don't stack them. */
if (file->pch)
if (file->pchname)
{
pfile->cb.read_pch (pfile, file->pchname, file->fd, file->path);
close (file->fd);
file->fd = -1;
free ((void *) file->pchname);
file->pchname = NULL;
return false;
}
@ -916,7 +912,7 @@ _cpp_stack_include (cpp_reader *pfile, const char *fname, int angle_brackets,
complicates LAST_SOURCE_LINE_LOCATION. This does not apply if we
found a PCH file (in which case linemap_add is not called) or we
were included from the command-line. */
if (! file->pch && file->err_no == 0 && type != IT_CMDLINE)
if (file->pchname == NULL && file->err_no == 0 && type != IT_CMDLINE)
pfile->line_table->highest_location--;
return _cpp_stack_file (pfile, file, type == IT_IMPORT);