re PR debug/33739 (Failure of gfortran.dg/literal_character_constant_1_*.F with -m64 -g on Darwin)
PR fortran/33739 * scanner.c (start_source_file, end_source_file, exit_remaining_files): New functions. (gfc_advance_line): Use the new functions. From-SVN: r130016
This commit is contained in:
parent
66ec5f8742
commit
4cdf766ef6
@ -1,3 +1,10 @@
|
||||
2007-11-08 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
|
||||
|
||||
PR fortran/33739
|
||||
* scanner.c (start_source_file, end_source_file,
|
||||
exit_remaining_files): New functions.
|
||||
(gfc_advance_line): Use the new functions.
|
||||
|
||||
2007-11-08 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
|
||||
|
||||
PR fortran/34028
|
||||
|
@ -300,13 +300,59 @@ gfc_at_eol (void)
|
||||
}
|
||||
|
||||
|
||||
struct file_entered_chainon
|
||||
{
|
||||
gfc_file *file;
|
||||
struct file_entered_chainon *prev;
|
||||
};
|
||||
|
||||
static struct file_entered_chainon *last_file_entered = NULL;
|
||||
|
||||
static void
|
||||
start_source_file (int line, gfc_file *file)
|
||||
{
|
||||
struct file_entered_chainon *f = gfc_getmem (sizeof
|
||||
(struct file_entered_chainon));
|
||||
|
||||
f->file = file;
|
||||
f->prev = last_file_entered;
|
||||
last_file_entered = f;
|
||||
|
||||
(*debug_hooks->start_source_file) (line, file->filename);
|
||||
}
|
||||
|
||||
static void
|
||||
end_source_file (int line)
|
||||
{
|
||||
gcc_assert (last_file_entered);
|
||||
last_file_entered = last_file_entered->prev;
|
||||
(*debug_hooks->end_source_file) (line);
|
||||
}
|
||||
|
||||
static void
|
||||
exit_remaining_files (void)
|
||||
{
|
||||
struct file_entered_chainon *f = last_file_entered;
|
||||
while (f)
|
||||
{
|
||||
/* The line number doesn't matter much, because we're at the end of
|
||||
the toplevel file anyway. */
|
||||
(*debug_hooks->end_source_file) (0);
|
||||
|
||||
f = f->prev;
|
||||
}
|
||||
}
|
||||
|
||||
/* Advance the current line pointer to the next line. */
|
||||
|
||||
void
|
||||
gfc_advance_line (void)
|
||||
{
|
||||
if (gfc_at_end ())
|
||||
return;
|
||||
{
|
||||
exit_remaining_files ();
|
||||
return;
|
||||
}
|
||||
|
||||
if (gfc_current_locus.lb == NULL)
|
||||
{
|
||||
@ -322,17 +368,15 @@ gfc_advance_line (void)
|
||||
&& gfc_current_locus.lb->file->up == gfc_current_locus.lb->next->file)
|
||||
{
|
||||
/* We exit from an included file. */
|
||||
(*debug_hooks->end_source_file)
|
||||
(gfc_linebuf_linenum (gfc_current_locus.lb->next));
|
||||
end_source_file (gfc_linebuf_linenum (gfc_current_locus.lb->next));
|
||||
gfc_current_locus.lb->next->dbg_emitted = true;
|
||||
}
|
||||
else if (gfc_current_locus.lb->next->file != gfc_current_locus.lb->file
|
||||
&& !gfc_current_locus.lb->next->dbg_emitted)
|
||||
{
|
||||
/* We enter into a new file. */
|
||||
(*debug_hooks->start_source_file)
|
||||
(gfc_linebuf_linenum (gfc_current_locus.lb),
|
||||
gfc_current_locus.lb->next->file->filename);
|
||||
start_source_file (gfc_linebuf_linenum (gfc_current_locus.lb),
|
||||
gfc_current_locus.lb->next->file);
|
||||
gfc_current_locus.lb->next->dbg_emitted = true;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user