diff options
author | Tom de Vries <tdevries@suse.de> | 2022-05-02 22:27:03 +0200 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2022-05-02 22:27:03 +0200 |
commit | 5335b0439c3df66f43123d83fcbab16ea3b3ecba (patch) | |
tree | c9d163132d71ba786987e6f4927f24a20dbc2621 | |
parent | 95929abb498786d9dce36bb94b6c3f1d63178956 (diff) | |
download | binutils-gdb-5335b0439c3df66f43123d83fcbab16ea3b3ecba.tar.gz |
[gdb/testsuite] Fix gdb.cp/align.exp with gcc 12.1 / 11.3
Starting with gcc 12.1 / gcc 11.3, for test-case gdb.cp/align.exp we run into:
...
align.cc:29:23: error: invalid application of 'alignof' to a void type^M
29 | unsigned a_void = alignof (void);^M
| ^~~~~~~~~~~~~~^M
...
Fix this by using __alignof__ instead.
Tested on x86_64-linux, with gcc 7.5.0, gcc 12.1 and clang 12.0.1.
-rw-r--r-- | gdb/testsuite/gdb.cp/align.exp | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/gdb/testsuite/gdb.cp/align.exp b/gdb/testsuite/gdb.cp/align.exp index 6cda04798e8..018a297cde9 100644 --- a/gdb/testsuite/gdb.cp/align.exp +++ b/gdb/testsuite/gdb.cp/align.exp @@ -80,8 +80,19 @@ puts $outfile { unsigned a_int3 = alignof (int[3]); -#if !defined (__clang__) - unsigned a_void = alignof (void); +#if defined __GNUC__ && !defined __clang__ + /* As a GNU C extension, GCC allows void pointer arithmetic, with + sizeof (void) == 1. + Another GNU C extension is __alignof__, which can be used to get + __alignof__ (void), which is also 1. This is unavailabe on clang. + GCC used to only warn for alignof (void), but starting with GCC 12.1, + as well as GCC 11.3, it will generate an error (note that using + -std=gnu++11 does not prevent the error). + So we avoid using alignof, and use __alignof__ instead. */ + unsigned a_void = __alignof__ (void); +#else + /* No support for __alignof__ (void), hardcode value. */ + unsigned a_void = 1; #endif struct base { char c; }; @@ -173,13 +184,5 @@ foreach type $typelist { set expected [get_integer_valueof a_int3 0] gdb_test "print alignof(int\[3\])" " = $expected" -# As an extension, GCC allows void pointer arithmetic, with -# sizeof(void) and alignof(void) both 1. This test checks -# GDB's support of GCC's extension. -if [test_compiler_info clang*] { - # Clang doesn't support GCC's extension. - set expected 1 -} else { - set expected [get_integer_valueof a_void 0] -} +set expected [get_integer_valueof a_void 0] gdb_test "print alignof(void)" " = $expected" |