@@ -22145,8 +22145,6 @@ static void
dwarf2out_source_line (unsigned int line, const char *filename,
int discriminator, bool is_stmt)
{
- static bool last_is_stmt = true;
-
if (debug_info_level >= DINFO_LEVEL_NORMAL
&& line != 0)
{
@@ -22161,19 +22159,34 @@ dwarf2out_source_line (unsigned int line, const char *filename,
if (DWARF2_ASM_LINE_DEBUG_INFO)
{
- /* Emit the .loc directive understood by GNU as. */
- fprintf (asm_out_file, "\t.loc %d %d 0", file_num, line);
- if (is_stmt != last_is_stmt)
+ static bool last_is_stmt = true;
+ static int last_file_num = -1;
+ static unsigned last_line = 0;
+ static int last_discriminator = -1;
+
+ if (last_file_num != file_num
+ || last_line != line
+ || last_is_stmt != is_stmt
+ || last_discriminator != discriminator)
{
- fprintf (asm_out_file, " is_stmt %d", is_stmt ? 1 : 0);
+ /* Emit the .loc directive understood by GNU as. */
+ fprintf (asm_out_file, "\t.loc %d %d 0", file_num, line);
+
+ if (is_stmt != last_is_stmt)
+ fprintf (asm_out_file, " is_stmt %d", is_stmt ? 1 : 0);
+
+ if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
+ fprintf (asm_out_file, " discriminator %d", discriminator);
+ fputc ('\n', asm_out_file);
+
+ /* Indicate that line number info exists. */
+ line_info_table_in_use++;
+
+ last_file_num = file_num;
+ last_line = line;
+ last_discriminator = discriminator;
last_is_stmt = is_stmt;
}
- if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
- fprintf (asm_out_file, " discriminator %d", discriminator);
- fputc ('\n', asm_out_file);
-
- /* Indicate that line number info exists. */
- line_info_table_in_use++;
}
else if (function_section (current_function_decl) != text_section)
{