From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7862) id 4E1A1386EC00; Fri, 11 Nov 2022 09:17:12 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4E1A1386EC00 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1668158232; bh=whFnAYUTCYC6Q9BO+g+SSk+yasEzIaVwrbMAy95c8GY=; h=From:To:Subject:Date:From; b=v/K7c64x3RKzrkIQnMQ6x4Nx5T8E9iTwQRNgAy5ZGtl/2d8A1FLELUfs2i9NQiKU5 MhQSGMrrenj72n7GcQo2hte7++DT/8scbv17cxFuDynWhUKX8SJAC83jAr+ITnQWls pfGm1bE6t1WuXPHYzpvXyyh1TkMVEKyiWjIOVhxE= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Bruno Larsen To: gdb-cvs@sourceware.org Subject: [binutils-gdb] gdb/testsuite: enable running gdb.cp/classes.exp with clang X-Act-Checkin: binutils-gdb X-Git-Author: Bruno Larsen X-Git-Refname: refs/heads/master X-Git-Oldrev: 9e9ffe8ee6c986e6788ad08b5635091e1f49b376 X-Git-Newrev: 729421925aee0e5b0954e062d757ad917fc02838 Message-Id: <20221111091712.4E1A1386EC00@sourceware.org> Date: Fri, 11 Nov 2022 09:17:12 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3D729421925aee= 0e5b0954e062d757ad917fc02838 commit 729421925aee0e5b0954e062d757ad917fc02838 Author: Bruno Larsen Date: Wed Sep 7 15:48:08 2022 +0200 gdb/testsuite: enable running gdb.cp/classes.exp with clang =20 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: =20 ptype/r class class_with_public_typedef type =3D class class_with_public_typedef { private: int a; public: class_with_public_typedef::INT b; =20 private: typedef int INT; } (gdb) FAIL: gdb.cp/classes.exp: ptype class class_with_public_typedef /= / wrong access specifier for typedef: private =20 While g++ provided the following output: =20 ptype/r class class_with_public_typedef type =3D class class_with_public_typedef { private: int a; public: class_with_public_typedef::INT b; =20 typedef int INT; } (gdb) PASS: gdb.cp/classes.exp: ptype class class_with_public_typedef =20 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. =20 Bug: https://github.com/llvm/llvm-project/issues/57608 Approved-by: Tom Tromey 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/classe= s.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" =20 standard_testfile .cc =20 -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++"] >=3D 11} { + lappend flags additional_flags=3D-Wno-non-c-typedef-for-linkage + } +} + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile $flags]} { return -1 } =20 @@ -319,6 +328,12 @@ proc test_ptype_class_objects {} { =20 # Classes with typedefs of different access. =20 + # Clang does not add access information for typedefs in classes. + # More information on: https://github.com/llvm/llvm-project/issues/576= 08 + 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;" } } =20 + 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" {