[PATCH] Add IEEE FLOAT128 support to test gdb.base/whatis-ptype-typedefs.exp

Carl Love cel@us.ibm.com
Wed Jul 13 19:38:18 GMT 2022


GDB maintainers:

GCC 12 on Power now sets the IEEE 128-bit floating point format as the
default format for 128-bit floating point numbers.  Previously the
default was the IBM long double format.  The change resulted in a
number of test failures as the type is now printed as __Float128 not
long double.

This patch updates the expected results to look for the new printed
values on GCC 12 and beyond while still looking for the previous value
on older versions of GCC.

The patch has been tested on Power with GCC 12 and 4.85 as well as X86
with GCC version 11.2.

Please let me know if this patch is acceptable for mainline. Thanks.

                     Carl Love

-------------------------------------------------------
Add IEEE FLOAT128 support to test gdb.base/whatis-ptype-typedefs.exp

The test fails with the following errors on PowerPC using gcc version 12.1:

...
ptype long_double_typedef
type = _Float128
(gdb) FAIL: gdb.base/whatis-ptype-typedefs.exp: lang=c: whatis/ptype: ptype long_double_typedef
whatis long_double_typedef2
type = long_double_typedef
(gdb) PASS: gdb.base/whatis-ptype-typedefs.exp: lang=c: whatis/ptype: whatis long_double_typedef2
ptype long_double_typedef2
type = _Float128
(gdb) FAIL: gdb.base/whatis-ptype-typedefs.exp: lang=c: whatis/ptype: ptype long_double_typedef2
whatis v_long_double_typedef
type = long_double_typedef
(gdb) PASS: gdb.base/whatis-ptype-typedefs.exp: lang=c: whatis/ptype: whatis v_long_double_typedef
ptype v_long_double_typedef
type = _Float128^M
(gdb) FAIL: gdb.base/whatis-ptype-typedefs.exp: lang=c: whatis/ptype: ptype v_long_double_typedef
whatis v_long_double_typedef2
type = long_double_typedef2
(gdb) PASS: gdb.base/whatis-ptype-typedefs.exp: lang=c: whatis/ptype: whatis v_long_double_typedef2
ptype v_long_double_typedef2
type = _Float128^M
(gdb) FAIL: gdb.base/whatis-ptype-typedefs.exp: lang=c: whatis/ptype: ptype v_long_double_typedef2
...

GCC enabled IEEE FLOAT 128-bit support starting with GCC 12 by default.
Previously long double was the default for 128-bit floating point support.
This patch updates the expected result for the "long doube" tests to
_Float128 if GCC 12 is used.  The previous "long double" result is
expected for GCC 11 and older versions.

The patch has been run on Power 7 (gcc version 4.8.5), Power 10 (gcc
version 12.1) and Intel x86_64 (gcc version 11.2.0) to verify the patch
fixes the 74 test failures on Power 10 with GCC 12 and does not introduce
any regression failures on older versions of GCC.
---
 .../gdb.base/whatis-ptype-typedefs.exp        | 26 ++++++++++++++-----
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/gdb/testsuite/gdb.base/whatis-ptype-typedefs.exp b/gdb/testsuite/gdb.base/whatis-ptype-typedefs.exp
index be76183ca79..a17084a19ec 100644
--- a/gdb/testsuite/gdb.base/whatis-ptype-typedefs.exp
+++ b/gdb/testsuite/gdb.base/whatis-ptype-typedefs.exp
@@ -77,6 +77,12 @@ proc prepare {lang} {
 #
 # This can be "c" or "c++".
 #
+
+# GCC 12 uses IEEE 128-bit floating point as the default starting with GCC 12.
+# The table below consists of the compiler independent tests.  The GCC version
+# specific tests are appended to the end of the table based on the compiler
+# version.
+
 # Columns in the table represent:
      # EXP                # whatis           # ptype           # language
 set table {
@@ -97,12 +103,6 @@ set table {
     {"double_typedef2"    "double_typedef"   "double"}
     {"v_double_typedef"   "double_typedef"   "double"}
     {"v_double_typedef2"  "double_typedef2"  "double"}
-
-    {"long_double_typedef"    "long double"           "long double"}
-    {"long_double_typedef2"   "long_double_typedef"   "long double"}
-    {"v_long_double_typedef"  "long_double_typedef"   "long double"}
-    {"v_long_double_typedef2" "long_double_typedef2"  "long double"}
-
     {"colors_typedef"     "(enum )?colors"   "enum colors( : unsigned int)? {red, green, blue}"}
     {"colors_typedef2"    "colors_typedef"   "enum colors( : unsigned int)? {red, green, blue}"}
     {"v_colors_typedef"   "colors_typedef"   "enum colors( : unsigned int)? {red, green, blue}"}
@@ -151,6 +151,20 @@ set table {
 	"c++"}
 }
 
+# Add the long double tests on the version of GCC
+if { [test_compiler_info gcc-*] && [gcc_major_version] >= 12 } {
+    lappend table {"long_double_typedef"    "long double"           "_Float128"}
+    lappend table {"long_double_typedef2"   "long_double_typedef"   "_Float128"}
+    lappend table {"v_long_double_typedef"  "long_double_typedef"   "_Float128"}
+    lappend table {"v_long_double_typedef2" "long_double_typedef2"  "_Float128"}
+
+} else {
+    lappend table {"long_double_typedef"    "long double"           "long double"}
+    lappend table {"long_double_typedef2"   "long_double_typedef"   "long double"}
+    lappend table {"v_long_double_typedef"  "long_double_typedef"   "long double"}
+    lappend table {"v_long_double_typedef2" "long_double_typedef2"  "long double"}
+}
+
 # The 4th column above is optional.  If present, it indicates that the
 # line should only be tested in the specified language.  This is a
 # helper function that checks whether LINE's language matches LANG.
-- 
2.36.1




More information about the Gdb-patches mailing list