[testsuite] Fix gcc.dg/debug/dwarf2/inline5.c with Solaris as (PR debug/87451)
Rainer Orth
ro@CeBiTec.Uni-Bielefeld.DE
Fri Jan 4 21:55:00 GMT 2019
Hi Richard,
>> On Thu, 3 Jan 2019, Rainer Orth wrote:
>>
>>> gcc.dg/debug/dwarf2/inline5.c currently FAILs with Solaris as (both
>>> sparc and x86):
>>>
>>> FAIL: gcc.dg/debug/dwarf2/inline5.c scan-assembler-not \\\\(DIE
>>> \\\\(0x([0-9a-f]*)\\\\) DW_TAG_lexical_block\\\\)[^#/!]*[#/!]
>>> [^(].*DW_TAG_lexical_block\\\\)[^#/!x]*x\\\\1[^#/!]*[#/!]
>>> DW_AT_abstract_origin
>>> FAIL: gcc.dg/debug/dwarf2/inline5.c scan-assembler-times
>>> DW_TAG_lexical_block\\\\)[^#/!]*[#/!] \\\\(DIE \\\\(0x[0-9a-f]*\\\\)
>>> DW_TAG_variable 1
>>>
>>> The first failure seems to be caused because .* performs multiline
>>> matches by default in Tcl; tightening it to [^\n]* avoids the problem.
>>
>> Hmm, but the matches are supposed to match multiple lines... how
>> does it fail for you?
>
> it matches all of
>
> (DIE (0x19f) DW_TAG_lexical_block)
> .byte 0xd / uleb128 0xd; (DIE (0x1a0) DW_TAG_variable)
> .ascii "j" / DW_AT_name
> .byte 0x1 / DW_AT_decl_file (/vol/gcc/src/hg/trunk/local/gcc/testsuite/gcc.dg/debug/dwarf2/inline5.c)
> .byte 0x12 / DW_AT_decl_line
> .byte 0x14 / DW_AT_decl_column
> .long 0x17f / DW_AT_type
> .byte 0 / end of children of DIE 0x19f
> .byte 0 / end of children of DIE 0x184
> .byte 0xe / uleb128 0xe; (DIE (0x1ac) DW_TAG_subprogram)
> .long 0x184 / DW_AT_abstract_origin
> .long .LFB0 / DW_AT_low_pc
> .long .LFE0-.LFB0 / DW_AT_high_pc
> .byte 0x1 / uleb128 0x1; DW_AT_frame_base
> .byte 0x9c / DW_OP_call_frame_cfa
> / DW_AT_GNU_all_call_sites
> .byte 0xf / uleb128 0xf; (DIE (0x1bb) DW_TAG_formal_parameter)
> .long 0x195 / DW_AT_abstract_origin
> .byte 0x2 / uleb128 0x2; DW_AT_location
> .byte 0x91 / DW_OP_fbreg
> .byte 0 / sleb128 0
> .byte 0x6 / uleb128 0x6; (DIE (0x1c3) DW_TAG_lexical_block)
> .long 0x19f / DW_AT_abstract_origin
>
> while with gas there's instead
>
> .uleb128 0xc / (DIE (0xad) DW_TAG_lexical_block)
> .uleb128 0xd / (DIE (0xae) DW_TAG_variable)
> .ascii "j\0" / DW_AT_name
> .byte 0x1 / DW_AT_decl_file (/vol/gcc/src/hg/trunk/local/gcc/testsuite/gcc.dg/debug/dwarf2/inline5.c)
>
> i.e. the pattern doesn't match with gas due to the [^(] while with as we
> have uleb128 first which does match, producing the failure (which shows
> that that part of my patch is wrong).
I still have a hard time determining what to do here. I've now reverted
the tree to r264642, i.e. the one before the PR debug/87443 patch. Then
I build on x86_64-pc-linux-gnu and ran the inline5.c testcase against
the old compiler. I'd have expected all the scan-assembler* tests to
FAIL here, but instead I get
PASS: gcc.dg/debug/dwarf2/inline5.c (test for excess errors)
PASS: gcc.dg/debug/dwarf2/inline5.c scan-assembler-times DW_TAG_inlined_subrouti
ne 2
FAIL: gcc.dg/debug/dwarf2/inline5.c scan-assembler-times DW_TAG_lexical_block\\)
[^#/!]*[#/!] DW_AT_abstract_origin 2
PASS: gcc.dg/debug/dwarf2/inline5.c scan-assembler-times DW_TAG_lexical_block\\)
[^#/!]*[#/!] \\(DIE \\(0x[0-9a-f]*\\) DW_TAG_variable 1
PASS: gcc.dg/debug/dwarf2/inline5.c scan-assembler-not \\(DIE \\(0x([0-9a-f]*)\\
) DW_TAG_lexical_block\\)[^#/!]*[#/!] [^(].*DW_TAG_lexical_block\\)[^#/!x]*x\\1[
^#/!]*[#/!] DW_AT_abstract_origin
FAIL: gcc.dg/debug/dwarf2/inline5.c scan-assembler-not DW_TAG_lexical_block\\)[^
#/!x]*x([0-9a-f]*)[^#/!]*[#/!] DW_AT_abstract_origin.*\\(DIE \\(0x\\1\\) DW_TAG_
lexical_block\\)[^#/!]*[#/!] DW_AT
i.e. the problematic scan-assembler-not test PASSes before and after
your patch, making it hard to determine what that test is guarding
against (i.e. what is matched on Linux/x86_64 or Solaris with gas) and
adapting it to the Solaris as syntax.
Rainer
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University
More information about the Gcc-patches
mailing list