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>
|
2007-11-08 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
|
||||||
|
|
||||||
PR fortran/34028
|
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. */
|
/* Advance the current line pointer to the next line. */
|
||||||
|
|
||||||
void
|
void
|
||||||
gfc_advance_line (void)
|
gfc_advance_line (void)
|
||||||
{
|
{
|
||||||
if (gfc_at_end ())
|
if (gfc_at_end ())
|
||||||
return;
|
{
|
||||||
|
exit_remaining_files ();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (gfc_current_locus.lb == NULL)
|
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)
|
&& gfc_current_locus.lb->file->up == gfc_current_locus.lb->next->file)
|
||||||
{
|
{
|
||||||
/* We exit from an included file. */
|
/* We exit from an included file. */
|
||||||
(*debug_hooks->end_source_file)
|
end_source_file (gfc_linebuf_linenum (gfc_current_locus.lb->next));
|
||||||
(gfc_linebuf_linenum (gfc_current_locus.lb->next));
|
|
||||||
gfc_current_locus.lb->next->dbg_emitted = true;
|
gfc_current_locus.lb->next->dbg_emitted = true;
|
||||||
}
|
}
|
||||||
else if (gfc_current_locus.lb->next->file != gfc_current_locus.lb->file
|
else if (gfc_current_locus.lb->next->file != gfc_current_locus.lb->file
|
||||||
&& !gfc_current_locus.lb->next->dbg_emitted)
|
&& !gfc_current_locus.lb->next->dbg_emitted)
|
||||||
{
|
{
|
||||||
/* We enter into a new file. */
|
/* We enter into a new file. */
|
||||||
(*debug_hooks->start_source_file)
|
start_source_file (gfc_linebuf_linenum (gfc_current_locus.lb),
|
||||||
(gfc_linebuf_linenum (gfc_current_locus.lb),
|
gfc_current_locus.lb->next->file);
|
||||||
gfc_current_locus.lb->next->file->filename);
|
|
||||||
gfc_current_locus.lb->next->dbg_emitted = true;
|
gfc_current_locus.lb->next->dbg_emitted = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user