re PR c++/26917 (ICE with -frepo on invalid code)

PR c++/26917
	* repo.c (repo_file): Remove.
	(open_repo_file, reopen_repo_file_for_write): Return fopened
	FILE * instead of setting global repo_file variable.
	(init_repo): Adjust caller.
	(finish_repo): Likewise.  Return instead of goto out before
	reopen_repo_file_for_write has been called.

From-SVN: r116654
This commit is contained in:
Jakub Jelinek 2006-09-02 08:52:24 +02:00 committed by Jakub Jelinek
parent 0166ff05ca
commit b2a06efa61
2 changed files with 24 additions and 11 deletions

View file

@ -1,3 +1,13 @@
2006-09-02 Jakub Jelinek <jakub@redhat.com>
PR c++/26917
* repo.c (repo_file): Remove.
(open_repo_file, reopen_repo_file_for_write): Return fopened
FILE * instead of setting global repo_file variable.
(init_repo): Adjust caller.
(finish_repo): Likewise. Return instead of goto out before
reopen_repo_file_for_write has been called.
2006-09-01 Nathan Sidwell <nathan@codesourcery.com>
PR c++/28705

View file

@ -40,13 +40,12 @@ Boston, MA 02110-1301, USA. */
static char *extract_string (char **);
static const char *get_base_filename (const char *);
static void open_repo_file (const char *);
static FILE *open_repo_file (const char *);
static char *afgets (FILE *);
static void reopen_repo_file_for_write (void);
static FILE *reopen_repo_file_for_write (void);
static GTY(()) tree pending_repo;
static char *repo_name;
static FILE *repo_file;
static const char *old_args, *old_dir, *old_main;
@ -118,14 +117,14 @@ get_base_filename (const char *filename)
return lbasename (filename);
}
static void
static FILE *
open_repo_file (const char *filename)
{
const char *p;
const char *s = get_base_filename (filename);
if (s == NULL)
return;
return NULL;
p = lbasename (s);
p = strrchr (p, '.');
@ -136,7 +135,7 @@ open_repo_file (const char *filename)
memcpy (repo_name, s, p - s);
memcpy (repo_name + (p - s), ".rpo", 5);
repo_file = fopen (repo_name, "r");
return fopen (repo_name, "r");
}
static char *
@ -155,6 +154,7 @@ void
init_repo (void)
{
char *buf;
FILE *repo_file;
if (! flag_use_repository)
return;
@ -167,7 +167,7 @@ init_repo (void)
if (!temporary_obstack_initialized_p)
gcc_obstack_init (&temporary_obstack);
open_repo_file (main_input_filename);
repo_file = open_repo_file (main_input_filename);
if (repo_file == 0)
return;
@ -205,16 +205,18 @@ init_repo (void)
fclose (repo_file);
}
static void
static FILE *
reopen_repo_file_for_write (void)
{
repo_file = fopen (repo_name, "w");
FILE *repo_file = fopen (repo_name, "w");
if (repo_file == 0)
{
error ("can't create repository information file %qs", repo_name);
flag_use_repository = 0;
}
return repo_file;
}
/* Emit any pending repos. */
@ -224,14 +226,15 @@ finish_repo (void)
{
tree t;
char *dir, *args;
FILE *repo_file;
if (!flag_use_repository)
return;
if (errorcount || sorrycount)
goto out;
return;
reopen_repo_file_for_write ();
repo_file = reopen_repo_file_for_write ();
if (repo_file == 0)
goto out;