[gdb/testsuite] Rewrite gdb_test_lines
authorTom de Vries <tdevries@suse.de>
Wed, 23 Jun 2021 21:46:04 +0000 (23:46 +0200)
committerTom de Vries <tdevries@suse.de>
Wed, 23 Jun 2021 21:46:04 +0000 (23:46 +0200)
commit2dd865d7c13559fe389e0c3e9ba4a92c5e312e9b
treed60e0408077c2844943fcb0d082b18d9bbef485f
parent0b98ef16426bb39b0831fe72224060a8eecc1ff5
[gdb/testsuite] Rewrite gdb_test_lines

On Ubuntu 20.04, when the debug info package for libc is not installed,
I get:

    FAIL: gdb.base/info-types-c++.exp: info types
    FAIL: gdb.base/info-types-c.exp: info types

The reason is that the output of info types is exactly:

    (gdb) info types
    All defined types:

    File /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.base/info-types.c:
    52:     typedef enum {...} anon_enum_t;
    45:     typedef struct {...} anon_struct_t;
    68:     typedef union {...} anon_union_t;
    28:     typedef struct baz_t baz;
    31:     typedef struct baz_t * baz_ptr;
    21:     struct baz_t;
            double
    33:     enum enum_t;
            float
            int
    38:     typedef enum enum_t my_enum_t;
    17:     typedef float my_float_t;
    16:     typedef int my_int_t;
    54:     typedef enum {...} nested_anon_enum_t;
    47:     typedef struct {...} nested_anon_struct_t;
    70:     typedef union {...} nested_anon_union_t;
    30:     typedef struct baz_t nested_baz;
    29:     typedef struct baz_t nested_baz_t;
    39:     typedef enum enum_t nested_enum_t;
    19:     typedef float nested_float_t;
    18:     typedef int nested_int_t;
    62:     typedef union union_t nested_union_t;
    56:     union union_t;
            unsigned int
    (gdb)

The lines we expect in the test contain an empty line at the end:

    ...
    "62:\[\t \]+typedef union union_t nested_union_t;" \
    "56:\[\t \]+union union_t;" \
    "--optional" "\[\t \]+unsigned int" \
    ""]

This is written with the supposition that other files will be listed, so
an empty line will be included to separate the symbols from this file
from the next one.  This empty line is not included when info-types.c is
the only file listed.

Fix this by rewriting gdb_test_lines to accept a single, plain tcl multiline
regexp, such that we can write:
...
    "62:\[\t \]+typedef union union_t nested_union_t;" \
    "56:\[\t \]+union union_t;(" \
    "\[\t \]+unsigned int)?" \
    "($|\r\n.*)"]
...

Tested affected test-cases:
- gdb.base/info-types-c.exp
- gdb.base/info-types-c++.exp
- gdb.base/info-macros.exp
- gdb.cp/cplusfuncs.exp
on x86_64-linux (openSUSE Leap 15.2), both with check and check-read1.

Also tested the first two with gcc-4.8.

Also tested on ubuntu 18.04.

gdb/testsuite/ChangeLog:

2021-06-23  Tom de Vries  <tdevries@suse.de>

* lib/gdb.exp (gdb_test_lines): Rewrite to accept single
multiline tcl regexp.
* gdb.base/info-types.exp.tcl: Update.  Make empty line at end of
regexp optional.
* gdb.base/info-macros.exp: Update.
* gdb.cp/cplusfuncs.exp: Update.
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/info-macros.exp
gdb/testsuite/gdb.base/info-types.exp.tcl
gdb/testsuite/gdb.cp/cplusfuncs.exp
gdb/testsuite/lib/gdb.exp