Skip tests requiring "alignof (void)" when compiling using clang
authorGary Benson <gbenson@redhat.com>
Mon, 20 Jul 2020 14:01:04 +0000 (15:01 +0100)
committerGary Benson <gbenson@redhat.com>
Mon, 20 Jul 2020 14:01:04 +0000 (15:01 +0100)
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.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.cp/align.exp

index 9e2e7e2754899f8461642a59fd0abde215fabe49..d0b848bb3d8370d9358365b6965d0787a3503e7a 100644 (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.
index 0905a27910355bed68db783a6f16dc8b0b7ab237..4894de02731d4500a8197d7e6bebde29667362de 100644 (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"