Commit d4c32e1d by Jakub Jelinek Committed by Jakub Jelinek

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
parent 764a79ed
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> 2008-04-01 Rafael Espindola <espindola@google.com>
* tree-vrp.c (extract_code_and_val_from_cond_with_ops): New. * tree-vrp.c (extract_code_and_val_from_cond_with_ops): New.
......
...@@ -373,6 +373,7 @@ c_common_read_pch (cpp_reader *pfile, const char *name, ...@@ -373,6 +373,7 @@ c_common_read_pch (cpp_reader *pfile, const char *name,
if (f == NULL) if (f == NULL)
{ {
cpp_errno (pfile, CPP_DL_ERROR, "calling fdopen"); cpp_errno (pfile, CPP_DL_ERROR, "calling fdopen");
close (fd);
return; return;
} }
...@@ -381,6 +382,7 @@ c_common_read_pch (cpp_reader *pfile, const char *name, ...@@ -381,6 +382,7 @@ c_common_read_pch (cpp_reader *pfile, const char *name,
if (fread (&h, sizeof (h), 1, f) != 1) if (fread (&h, sizeof (h), 1, f) != 1)
{ {
cpp_errno (pfile, CPP_DL_ERROR, "reading"); cpp_errno (pfile, CPP_DL_ERROR, "reading");
fclose (f);
return; return;
} }
...@@ -417,7 +419,10 @@ c_common_read_pch (cpp_reader *pfile, const char *name, ...@@ -417,7 +419,10 @@ c_common_read_pch (cpp_reader *pfile, const char *name,
gt_pch_restore (f); gt_pch_restore (f);
if (cpp_read_state (pfile, name, f, smd) != 0) if (cpp_read_state (pfile, name, f, smd) != 0)
return; {
fclose (f);
return;
}
fclose (f); fclose (f);
......
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> 2008-03-28 Tom Tromey <tromey@redhat.com>
* Makefile.in (POSTCOMPILE): New variable. * Makefile.in (POSTCOMPILE): New variable.
......
/* Part of CPP library. File handling. /* Part of CPP library. File handling.
Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1998, 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. Free Software Foundation, Inc.
Written by Per Bothner, 1994. Written by Per Bothner, 1994.
Based on CCCP program by Paul Rubin, June 1986 Based on CCCP program by Paul Rubin, June 1986
...@@ -106,9 +106,6 @@ struct _cpp_file ...@@ -106,9 +106,6 @@ struct _cpp_file
/* If BUFFER above contains the true contents of the file. */ /* If BUFFER above contains the true contents of the file. */
bool buffer_valid; 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 /* 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) ...@@ -322,9 +319,7 @@ pch_open_file (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch)
} }
closedir (pchdir); closedir (pchdir);
} }
if (valid) if (!valid)
file->pch = true;
else
*invalid_pch = true; *invalid_pch = true;
} }
...@@ -703,11 +698,12 @@ should_stack_file (cpp_reader *pfile, _cpp_file *file, bool import) ...@@ -703,11 +698,12 @@ should_stack_file (cpp_reader *pfile, _cpp_file *file, bool import)
return false; return false;
/* Handle PCH files immediately; don't stack them. */ /* 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); pfile->cb.read_pch (pfile, file->pchname, file->fd, file->path);
close (file->fd);
file->fd = -1; file->fd = -1;
free ((void *) file->pchname);
file->pchname = NULL;
return false; return false;
} }
...@@ -916,7 +912,7 @@ _cpp_stack_include (cpp_reader *pfile, const char *fname, int angle_brackets, ...@@ -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 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 found a PCH file (in which case linemap_add is not called) or we
were included from the command-line. */ 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--; pfile->line_table->highest_location--;
return _cpp_stack_file (pfile, file, type == IT_IMPORT); return _cpp_stack_file (pfile, file, type == IT_IMPORT);
......
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