public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
From: Bruno Larsen <blarsen@sourceware.org>
To: gdb-cvs@sourceware.org
Subject: [binutils-gdb] gdb/testsuite: enable running gdb.cp/classes.exp with clang
Date: Fri, 11 Nov 2022 09:17:12 +0000 (GMT)	[thread overview]
Message-ID: <20221111091712.4E1A1386EC00@sourceware.org> (raw)

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=729421925aee0e5b0954e062d757ad917fc02838

commit 729421925aee0e5b0954e062d757ad917fc02838
Author: Bruno Larsen <blarsen@redhat.com>
Date:   Wed Sep 7 15:48:08 2022 +0200

    gdb/testsuite: enable running gdb.cp/classes.exp with clang
    
    When attempting to run the gdb.cp/classes.exp test using Clang++, the
    test fails to prepare with -Wnon-c-typedef-for-linkage like the
    previously fixed gdb.cp/class2.exp. Upon fixing this, the test shows 5
    unexpected failures. One such failures is:
    
    ptype/r class class_with_public_typedef
    type = class class_with_public_typedef {
      private:
        int a;
      public:
        class_with_public_typedef::INT b;
    
      private:
        typedef int INT;
    }
    (gdb) FAIL: gdb.cp/classes.exp: ptype class class_with_public_typedef // wrong access specifier for typedef: private
    
    While g++ provided the following output:
    
    ptype/r class class_with_public_typedef
    type = class class_with_public_typedef {
      private:
        int a;
      public:
        class_with_public_typedef::INT b;
    
        typedef int INT;
    }
    (gdb) PASS: gdb.cp/classes.exp: ptype class class_with_public_typedef
    
    This error happens because Clang does not add DW_AT_accessibility to
    typedefs inside classes, and without this information GDB defaults to
    assuming the typedef is private.  Since there is nothing that GDB can do
    about this, these tests have been set as xfails, and Clang bug 57608 has
    been filed.
    
    Bug: https://github.com/llvm/llvm-project/issues/57608
    Approved-by: Tom Tromey <tom@tromey.com>

Diff:
---
 gdb/testsuite/gdb.cp/classes.exp | 36 +++++++++++++++++++++++++++++++++++-
 1 file changed, 35 insertions(+), 1 deletion(-)

diff --git a/gdb/testsuite/gdb.cp/classes.exp b/gdb/testsuite/gdb.cp/classes.exp
index 7b8b315ac1f..9a947754bb6 100644
--- a/gdb/testsuite/gdb.cp/classes.exp
+++ b/gdb/testsuite/gdb.cp/classes.exp
@@ -24,7 +24,16 @@ load_lib "cp-support.exp"
 
 standard_testfile .cc
 
-if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} {
+set flags [list debug c++]
+set clang_used false
+if { [test_compiler_info "clang-*" "c++"] } {
+    set clang_used true
+    if { [gcc_major_version "clang-*" "c++"] >= 11} {
+	lappend flags additional_flags=-Wno-non-c-typedef-for-linkage
+    }
+}
+
+if {[prepare_for_testing "failed to prepare" $testfile $srcfile $flags]} {
     return -1
 }
 
@@ -319,6 +328,12 @@ proc test_ptype_class_objects {} {
 
     # Classes with typedefs of different access.
 
+    # Clang does not add access information for typedefs in classes.
+    # More information on: https://github.com/llvm/llvm-project/issues/57608
+    if {$::clang_used} {
+	setup_xfail "clang 57608" *-*-*
+    }
+
     cp_test_ptype_class \
 	"class class_with_typedefs" "" "class" "class_with_typedefs" \
 	{
@@ -339,6 +354,10 @@ proc test_ptype_class_objects {} {
 	    { typedef private "typedef int private_int;" }
 	}
 
+    if {$::clang_used} {
+	setup_xfail "clang 57608" *-*-*
+    }
+
     cp_test_ptype_class \
 	"class class_with_public_typedef" "" "class" \
 	"class_with_public_typedef" {
@@ -346,6 +365,11 @@ proc test_ptype_class_objects {} {
 	    { field public "class_with_public_typedef::INT b;" }
 	    { typedef public "typedef int INT;" }
 	}
+
+    if {$::clang_used} {
+	setup_xfail "clang 57608" *-*-*
+    }
+
     cp_test_ptype_class \
 	"class class_with_protected_typedef" "" "class" \
 	"class_with_protected_typedef" {
@@ -353,6 +377,11 @@ proc test_ptype_class_objects {} {
 	    { field protected "class_with_protected_typedef::INT b;" }
 	    { typedef protected "typedef int INT;" }
 	}
+
+    if {$::clang_used} {
+	setup_xfail "clang 57608" *-*-*
+    }
+
     cp_test_ptype_class \
 	"struct struct_with_protected_typedef" "" "struct" \
 	"struct_with_protected_typedef" {
@@ -360,6 +389,11 @@ proc test_ptype_class_objects {} {
 	    { field protected "struct_with_protected_typedef::INT b;" }
 	    { typedef protected "typedef int INT;" }
 	}
+
+    if {$::clang_used} {
+	setup_xfail "clang 57608" *-*-*
+    }
+
     cp_test_ptype_class \
 	"struct struct_with_private_typedef" "" "struct" \
 	"struct_with_private_typedef" {

                 reply	other threads:[~2022-11-11  9:17 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221111091712.4E1A1386EC00@sourceware.org \
    --to=blarsen@sourceware.org \
    --cc=gdb-cvs@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).