[gdb/testsuite] Fix info-types.exp with gcc/g++ 4.8
authorTom de Vries <tdevries@suse.de>
Thu, 3 Oct 2019 13:02:58 +0000 (15:02 +0200)
committerTom de Vries <tdevries@suse.de>
Thu, 3 Oct 2019 13:02:58 +0000 (15:02 +0200)
The gdb.base/info-types.exp test-case FAILs with gcc/g++ 4.8 because the DWARF
record for the 'unsigned int' type is missing in the executables, while it is
present for gcc/g++ 7.4.1.

For a minimal example using gcc 7.4.1:
...
$ echo "enum enum_t { AA, BB, CC }; enum enum_t var;" > enum.c
$ gcc enum.c -c -g
...
we find that the enum type has DW_AT_encoding 'unsigned':
 <1><1d>: Abbrev Number: 2 (DW_TAG_enumeration_type)
    <1e>   DW_AT_name        : (indirect string, offset: 0x1f): enum_t
    <22>   DW_AT_encoding    : 7        (unsigned)
    <23>   DW_AT_byte_size   : 4
    <24>   DW_AT_type        : <0x3e>
    <28>   DW_AT_decl_file   : 1
    <29>   DW_AT_decl_line   : 1
    <2a>   DW_AT_sibling     : <0x3e>
...
and a DW_AT_type reference to the type 'unsigned int':
...
 <1><3e>: Abbrev Number: 4 (DW_TAG_base_type)
    <3f>   DW_AT_byte_size   : 4
    <40>   DW_AT_encoding    : 7        (unsigned)
    <41>   DW_AT_name        : (indirect string, offset: 0x26): unsigned int
...

With gcc 4.8.5 however, we have no 'unsigned' encoding, and no DW_AT_type:
...
 <1><1d>: Abbrev Number: 2 (DW_TAG_enumeration_type)
    <1e>   DW_AT_name        : (indirect string, offset: 0x1f): enum_t
    <22>   DW_AT_byte_size   : 4
    <23>   DW_AT_decl_file   : 1
    <24>   DW_AT_decl_line   : 1
    <25>   DW_AT_sibling     : <0x39>
...
as well as no record for 'unsigned int'.

Make the test-case pass with gcc/g++ 4.8 by making the presence of the
'unsigned int' type optional.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2019-10-03  Tom de Vries  <tdevries@suse.de>

PR testsuite/25059
* gdb.base/info-types.exp: Make the presence of the 'unsigned int'
type optional.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/info-types.exp

index 8f01b878f8aeac737720153ddc49c2d29d8a2248..0675e856c84a74b36e4ec3ae4ab3cfcfbcd0f6dc 100644 (file)
@@ -1,3 +1,9 @@
+2019-10-03  Tom de Vries  <tdevries@suse.de>
+
+       PR testsuite/25059
+       * gdb.base/info-types.exp: Make the presence of the 'unsigned int'
+       type optional.
+
 2019-10-02  Andreas Arnez  <arnez@linux.ibm.com>
 
        * gdb.python/py-format-string.c (string.h): New include.
index fd190ae58f487cf173d57ae9bcd86187d80e3df0..8c1ddac2c6b38f2e86dd9c6ff9d29ed60cecd0af 100644 (file)
@@ -85,8 +85,8 @@ proc run_test { lang } {
                 "39:\[\t \]+typedef enum_t nested_enum_t;" \
                 "19:\[\t \]+typedef float nested_float_t;" \
                 "18:\[\t \]+typedef int nested_int_t;" \
-                "62:\[\t \]+typedef union_t nested_union_t;" \
-                "\[\t \]+unsigned int(" \
+                "62:\[\t \]+typedef union_t nested_union_t;(" \
+                "\[\t \]+unsigned int)?(" \
                 "" \
                 "File .*:.*)?" ]
     } else {
@@ -117,8 +117,8 @@ proc run_test { lang } {
                 "19:\[\t \]+typedef float nested_float_t;" \
                 "18:\[\t \]+typedef int nested_int_t;" \
                 "62:\[\t \]+typedef union union_t nested_union_t;" \
-                "56:\[\t \]+union union_t;" \
-                "\[\t \]+unsigned int(" \
+                "56:\[\t \]+union union_t;(" \
+                "\[\t \]+unsigned int)?(" \
                 "" \
                 "File .*:.*)?" ]
     }