final.c (force_source_line): New global variable.

* final.c (force_source_line): New global variable.
	(final_scan_insn): Set it to true instead of clearing last_filename.
	(notice_source_line): Return true if force_source_line is true,
	unless source info is absent.

From-SVN: r106699
This commit is contained in:
Eric Botcazou 2005-11-09 17:11:53 +00:00 committed by Eric Botcazou
parent fcc207bfd7
commit b8176fe4bb
2 changed files with 19 additions and 6 deletions

View File

@ -1,3 +1,10 @@
2005-11-09 Eric Botcazou <ebotcazou@adacore.com>
* final.c (force_source_line): New global variable.
(final_scan_insn): Set it to true instead of clearing last_filename.
(notice_source_line): Return true if force_source_line is true,
unless source info is absent.
2005-11-09 Andrew Pinski <pinskia@physics.uc.edu>
PR c/24644

View File

@ -141,6 +141,9 @@ static int high_function_linenum;
/* Filename of last NOTE. */
static const char *last_filename;
/* Whether to force emission of a line note before the next insn. */
static bool force_source_line = false;
extern int length_unit_log; /* This is defined in insn-attrtab.c. */
/* Nonzero while outputting an `asm' with operands.
@ -1739,7 +1742,7 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED,
if ((*seen & (SEEN_EMITTED | SEEN_BB)) == SEEN_BB)
{
*seen |= SEEN_EMITTED;
last_filename = NULL;
force_source_line = true;
}
else
*seen |= SEEN_BB;
@ -1763,7 +1766,7 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED,
if ((*seen & (SEEN_EMITTED | SEEN_NOTE)) == SEEN_NOTE)
{
*seen |= SEEN_EMITTED;
last_filename = NULL;
force_source_line = true;
}
else
*seen |= SEEN_NOTE;
@ -1781,7 +1784,7 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED,
if ((*seen & (SEEN_EMITTED | SEEN_NOTE)) == SEEN_NOTE)
{
*seen |= SEEN_EMITTED;
last_filename = NULL;
force_source_line = true;
}
else
*seen |= SEEN_NOTE;
@ -2501,8 +2504,7 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED,
return NEXT_INSN (insn);
}
/* Output debugging info to the assembler file FILE
based on the NOTE-insn INSN, assumed to be a line number. */
/* Return whether a source line note needs to be emitted before INSN. */
static bool
notice_source_line (rtx insn)
@ -2510,8 +2512,12 @@ notice_source_line (rtx insn)
const char *filename = insn_file (insn);
int linenum = insn_line (insn);
if (filename && (filename != last_filename || last_linenum != linenum))
if (filename
&& (force_source_line
|| filename != last_filename
|| last_linenum != linenum))
{
force_source_line = false;
last_filename = filename;
last_linenum = linenum;
high_block_linenum = MAX (last_linenum, high_block_linenum);