Skip tests requiring "alignof (void)" when compiling using clang

As an extension, GCC allows void pointer arithmetic, with sizeof(void)
and alignof(void) both 1.  GDB supports this extension, but clang does
not, and fails to compile the generated output of gdb.cp/align.exp
with the following error:

 gdb compile failed, /gdbtest/build/gdb/testsuite/outputs/gdb.cp/align/align.cc:28:23:
       error: invalid application of 'alignof' to an incomplete type 'void'
    unsigned a_void = alignof (void);
                      ^       ~~~~~~
 1 error generated.

This commit adds preprocessor conditionals to the generated output, to
omit the unsupported code when using clang, and supplies the expected
value so the test can complete.

gdb/testsuite/ChangeLog:

	* gdb.cp/align.exp: Fix "alignof (void)" tests when compiling
	with clang.
This commit is contained in:
Gary Benson 2020-07-20 15:01:04 +01:00
parent 39326c35dd
commit c14b491355
2 changed files with 17 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2020-07-20 Gary Benson <gbenson@redhat.com>
* gdb.cp/align.exp: Fix "alignof (void)" tests when compiling
with clang.
2020-07-20 Tom de Vries <tdevries@suse.de>
* gdb.threads/omp-par-scope.c (lock, lock2): New variable.

View File

@ -80,7 +80,9 @@ puts $outfile {
unsigned a_int3 = alignof (int[3]);
#if !defined (__clang__)
unsigned a_void = alignof (void);
#endif
struct base { char c; };
struct derived : public virtual base { int i; };
@ -170,5 +172,14 @@ foreach type $typelist {
set expected [get_integer_valueof a_int3 0]
gdb_test "print alignof(int\[3\])" " = $expected"
set expected [get_integer_valueof a_void 0]
# 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]
}
gdb_test "print alignof(void)" " = $expected"