ping

> Hi,
> 
> This was a painful one to fix, because I hate regexps, especially when they 
> are quoted. On darwin, we have this failure:
> 
>    FAIL: gcc.dg/debug/dwarf2/inline4.c scan-assembler 
> DW_TAG_inlined_subroutine[^\\\\(]*\\\\([^\\\\)]*\\\\)[^\\\\(]*\\\\(DIE 
> \\\\(0x[0-9a-f]*\\\\) DW_TAG_formal_parameter[^\\\\(]*\\\\(DIE 
> \\\\(0x[0-9a-f]*\\\\) DW_TAG_variable
> 
> That hideous regexp is trying to match (generated on Linux):
> 
>>        .uleb128 0x4    # (DIE (0x5c) DW_TAG_inlined_subroutine)
>>        .long   0xa0    # DW_AT_abstract_origin
>>        .quad   .LBI4   # DW_AT_entry_pc
>>        .byte   .LVU2   # DW_AT_GNU_entry_view
>>        .quad   .LBB4   # DW_AT_low_pc
>>        .quad   .LBE4-.LBB4     # DW_AT_high_pc
>>        .byte   0x1     # DW_AT_call_file (u.c)
>>        .byte   0xf     # DW_AT_call_line
>>        .byte   0x14    # DW_AT_call_column
>>        .uleb128 0x5    # (DIE (0x7d) DW_TAG_formal_parameter)
>>        .long   0xad    # DW_AT_abstract_origin
>>        .long   .LLST0  # DW_AT_location
>>        .long   .LVUS0  # DW_AT_GNU_locviews
>>        .uleb128 0x6    # (DIE (0x8a) DW_TAG_variable)
> 
> It is using the parentheses to check what is between  
> DW_TAG_inlined_subroutine, DW_TAG_formal_parameter and DW_TAG_variable. 
> There’s only one block of parentheses in the middle, that "(u.c)”. However, 
> on darwin, the generated output is more compact:
> 
>>        .uleb128 0x4    ; (DIE (0x188) DW_TAG_inlined_subroutine)
>>        .long   0x1b8   ; DW_AT_abstract_origin
>>        .quad   LBB4    ; DW_AT_low_pc
>>        .quad   LBE4    ; DW_AT_high_pc
>>        .uleb128 0x5    ; (DIE (0x19d) DW_TAG_formal_parameter)
>>        .long   0x1c6   ; DW_AT_abstract_origin
>>        .uleb128 0x6    ; (DIE (0x1a2) DW_TAG_variable)
> 
> I think that’s valid as well, and the test should pass (what the test really 
> wants to check is that there is no DW_TAG_lexical_block emitted there, see 
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=37801 for its origin). It could 
> be achieved in two ways:
> 
> 1. making darwin emit the DW_AT_call_file
> 2. adjusting the regexp to match, making the internal block of parentheses 
> optional 
> 
> I chose the second approach. It makes the test pass on darwin. If someone can 
> test it on linux, it’d be appreciated :) I don’t have ready access to such a 
> system right now.
> 
> Once that passes, OK to commit?
> FX
> 

Attachment: 0001-Testsuite-DWARF2-adjust-regexp-to-match-darwin-outpu.patch
Description: Binary data

Reply via email to