[08/11] gdb/testsuite: disable gdb.cp/typeid.exp when using clang

Message ID 20221004170747.154307-10-blarsen@redhat.com
State Committed
Headers
Series Cleanup gdb.cp tests when running with clang |

Commit Message

Bruno Larsen Oct. 4, 2022, 5:07 p.m. UTC
  Since clang chooses to not add any debug information from standard
libraries, gdb.cp/typeid.exp will always fail, so this test is skipped
when it clang used.
---
 gdb/testsuite/gdb.cp/typeid.exp | 5 +++++
 1 file changed, 5 insertions(+)
  

Comments

Andrew Burgess Oct. 26, 2022, 3:37 p.m. UTC | #1
Bruno Larsen via Gdb-patches <gdb-patches@sourceware.org> writes:

> Since clang chooses to not add any debug information from standard
> libraries, gdb.cp/typeid.exp will always fail, so this test is skipped
> when it clang used.

OK, so I see what you're saying.  But I don't think it follows that we
should skip the whole test.  Also, without digging into the test
further, and looking at the generated symbols, I think the above
explanation makes things sound worse than they are.

So, here's some of the output for 'nm -C' for the test binary (built
with Clang):

  0000000000003b70 V typeinfo for VB2
  0000000000003b38 V typeinfo for Base
  0000000000003b98 V typeinfo for Derived
  0000000000003b28 V typeinfo for char [5]
                   U typeinfo for int@@CXXABI_1.3
  0000000000003bd0 V typeinfo for Base*
                   U typeinfo for char*@@CXXABI_1.3
                   U typeinfo for char const*@@CXXABI_1.3
  0000000000002012 V typeinfo name for VB1
  000000000000201d V typeinfo name for VB2
  0000000000002017 V typeinfo name for Base
  0000000000002009 V typeinfo name for Derived
  0000000000002004 V typeinfo name for char [5]
  0000000000002022 V typeinfo name for Base*

So, you're correct, Clang hasn't included the typeinfo for the base
types.  Except, it sort of has included it, it's just not compiled into
the binary.

So, I think, where the test does this:

  foreach simple_var {i cp ccp ca b} {

We should actually do something like:

  set var {ca b}
  if {$started || ![test_compiler_info clang-*-* c++]} {
      # Clang doesn't place type information for the base types in
      # the executable, and relies on this being linked in from the
      # standard library.  As a result, type information for these
      # variables is only available once the inferior is started.
      lappend var i cp ccp
  }
  foreach simple_var $var {

What do you think?

Thanks,
Andrew


> ---
>  gdb/testsuite/gdb.cp/typeid.exp | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/gdb/testsuite/gdb.cp/typeid.exp b/gdb/testsuite/gdb.cp/typeid.exp
> index 6411217191a..d110b3e7695 100644
> --- a/gdb/testsuite/gdb.cp/typeid.exp
> +++ b/gdb/testsuite/gdb.cp/typeid.exp
> @@ -23,6 +23,11 @@ if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} {
>      return -1
>  }
>  
> +if {[test_compiler_info clang-*-*]} {
> +    untested "clang does not add debuginfo for standard libraries"
> +    return
> +}
> +
>  proc do_typeid_tests {started} {
>      global hex
>  
> -- 
> 2.37.3
  

Patch

diff --git a/gdb/testsuite/gdb.cp/typeid.exp b/gdb/testsuite/gdb.cp/typeid.exp
index 6411217191a..d110b3e7695 100644
--- a/gdb/testsuite/gdb.cp/typeid.exp
+++ b/gdb/testsuite/gdb.cp/typeid.exp
@@ -23,6 +23,11 @@  if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} {
     return -1
 }
 
+if {[test_compiler_info clang-*-*]} {
+    untested "clang does not add debuginfo for standard libraries"
+    return
+}
+
 proc do_typeid_tests {started} {
     global hex