From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sonic303-21.consmr.mail.ir2.yahoo.com (sonic303-21.consmr.mail.ir2.yahoo.com [77.238.178.202]) by sourceware.org (Postfix) with ESMTPS id 3CF38385DC06 for ; Fri, 3 Apr 2020 19:57:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 3CF38385DC06 X-YMail-OSG: 5v8EC2IVM1nH3yF3UVkctCrJjxjpIH6JsOa_pDbN8xe19NB5X_AW0okrmw.IASO XQN7xTyR_6ig7ocKuEd.416L4jyLO5KLJxf_HWb4tPK10CHQ3iLM5BNTFdHgqViIQlkqGhaIUK4A DL_6H7Jl3TMAVfejdxuZTO1lw.2W1yVUUJED_nO.CQHFgfIDx1Su7RV1bQq2vRZ3t00vwXoS3f96 r1c.THwb3zGwUt6_df2jm36QpLGkl6DdcAo8RLouy_3hOtb7EMjTxUUYU8AovWYjozVwPylmK_kl G6HVXaaDN3q3_M_bDqsEYAYG2RvNgNZMNie7TY4.rOEERw3WvMJTx0X4zDZG2zaXn.hYupYhHpMC qloRaMNfsxZjfkTj_LLBbLHpJZWfbB2Xkj6_UA1ljHmwBp57811YiBXuCCsLd4Yi3OxLOUIa1olL EIKJ_SRB_qKTrTPCUqVFZ6hHWwBVtfowWGsOCxng_PYqFo7TAlgH3ZpQ1E1cHRz5UxQGwX7Htde4 Q8qAvme1nBiHAsvMhc80CdY9g3xEwh9FRcfWvE85JaikffXQ728cNrImYheXuhuxOK7dxLZ6inbn NR3ojznATCK.HPXCC1aJIAJM_Ks_1kZ2NvWWmrrQDo6JOjk.0.7JgFJfGquB_p4attjsh5kVyCAt 85xapVPUPGTurWYeXBvauUFDtWpKpfQjYkL_Sr5WFSuGadR5xZvWuxJzf1ToQfDD_xfzxb0jurtw PfSrBjNQMbczqknfQ3g.op_SN8CYN8_UXWuNXpS.zotj95z__OjFZsc33ddO1PBFrn9iNXJheQqy 1VcEMMx1ee_QjagWE1DU6VhZPuvaoUS8vlBYWCVAHhbubXQnss8c1Q5.dhDVwykZ9fEb409oTI4o rVUDbh3__8FaCukhbuH5BcCyrfHW5hGoNqd5LIVKXZ_0qbZsU6WpiblybX82U0i7Y5PHyMYV0bBC .OQsrZze0npO_GC8itc43iyss1ZZld4omCSjPgONsBHks5zEz0DgowDnRAj.68YOR2SGz3zozxW8 ZDb29Iw53ZUzNJTv8VetGl.W4zVRHdUDF2USdAxJiN9u2DXDpI6avUnV_JP.VEDBLtuI5QNHJ4LA nBW5hhK19QvNTMyo_w_wEUs.rJ1MAM48P2g7TW_Z4rA6ivRQcc8jTzLCHQYQG7F78bw3TFQ.2KMw W6fGE2qQmjDDyNhy6hn_XMutZfA4XxTxhy8PqVc8JUHYUlZzIkkAnTql7CvRkXCj7Y16o5Sa.Clx sXB.W9J9Vv.kA7_BuESHMGfNNgda8CVGqdam8hYTnetIkcy77dTyRfIQ.p2g1rcIXJI0gesMf.ZI z98D.1DxjVaCKdHzGsrfMjm5YngY_XIl7ps1KKbOIFl9SG5VyLsPCoLh1Pvs0Lg-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.ir2.yahoo.com with HTTP; Fri, 3 Apr 2020 19:57:42 +0000 Received: by smtp423.mail.ir2.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID baee7c4ac75f91cb4e2eaa36a3cf5114; Fri, 03 Apr 2020 19:57:40 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH][PR gdb/25325] Fix attributes of typed enums of typedefs Date: Fri, 3 Apr 2020 21:57:06 +0200 Message-Id: <20200403195706.4862-1-ssbssa@yahoo.de> X-Mailer: git-send-email 2.26.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Antivirus: Avast (VPS 200402-0, 04/02/2020), Outbound message X-Antivirus-Status: Clean References: <20200403195706.4862-1-ssbssa.ref@yahoo.de> X-Spam-Status: No, score=-22.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 Apr 2020 19:57:44 -0000 For this enum: typedef unsigned char byte; enum byte_enum : byte { byte_val = 128 }; The unsigned attribute is not set: (gdb) p byte_val $1 = -128 That's because it uses the attributes of the 'byte' typedef for the enum. So this changes it to use the attributes of the underlying 'unsigned char' instead. gdb/ChangeLog: 2020-04-03 Hannes Domani PR gdb/25325 * dwarf2/read.c (read_enumeration_type): Fix typed enum attributes. gdb/testsuite/ChangeLog: 2020-04-03 Hannes Domani PR gdb/25325 * gdb.cp/typed-enum.cc: New test. * gdb.cp/typed-enum.exp: New file. --- gdb/dwarf2/read.c | 10 +++++---- gdb/testsuite/gdb.cp/typed-enum.cc | 35 +++++++++++++++++++++++++++++ gdb/testsuite/gdb.cp/typed-enum.exp | 31 +++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 gdb/testsuite/gdb.cp/typed-enum.cc create mode 100644 gdb/testsuite/gdb.cp/typed-enum.exp diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 6ee33fcd6e..0912788ac0 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -15525,12 +15525,14 @@ read_enumeration_type (struct die_info *die, struct dwarf2_cu *cu) the underlying type if needed. */ if (TYPE_TARGET_TYPE (type) != NULL && !TYPE_STUB (TYPE_TARGET_TYPE (type))) { - TYPE_UNSIGNED (type) = TYPE_UNSIGNED (TYPE_TARGET_TYPE (type)); + struct type *underlying_type = TYPE_TARGET_TYPE (type); + underlying_type = check_typedef (underlying_type); + TYPE_UNSIGNED (type) = TYPE_UNSIGNED (underlying_type); if (TYPE_LENGTH (type) == 0) - TYPE_LENGTH (type) = TYPE_LENGTH (TYPE_TARGET_TYPE (type)); + TYPE_LENGTH (type) = TYPE_LENGTH (underlying_type); if (TYPE_RAW_ALIGN (type) == 0 - && TYPE_RAW_ALIGN (TYPE_TARGET_TYPE (type)) != 0) - set_type_align (type, TYPE_RAW_ALIGN (TYPE_TARGET_TYPE (type))); + && TYPE_RAW_ALIGN (underlying_type) != 0) + set_type_align (type, TYPE_RAW_ALIGN (underlying_type)); } TYPE_DECLARED_CLASS (type) = dwarf2_flag_true_p (die, DW_AT_enum_class, cu); diff --git a/gdb/testsuite/gdb.cp/typed-enum.cc b/gdb/testsuite/gdb.cp/typed-enum.cc new file mode 100644 index 0000000000..caf4288fff --- /dev/null +++ b/gdb/testsuite/gdb.cp/typed-enum.cc @@ -0,0 +1,35 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +typedef unsigned char byte; + +enum byte_enum : byte +{ + byte_val = 128 +}; + +enum uchar_enum : unsigned char +{ + uchar_val = 128 +}; + +int main() +{ + int v1 = byte_val; + int v2 = uchar_val; + return v1 == v2; +} diff --git a/gdb/testsuite/gdb.cp/typed-enum.exp b/gdb/testsuite/gdb.cp/typed-enum.exp new file mode 100644 index 0000000000..0427b79279 --- /dev/null +++ b/gdb/testsuite/gdb.cp/typed-enum.exp @@ -0,0 +1,31 @@ +# Copyright 2020 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Check if unsigned typedef are handled correctly with typed enums. + +if { [skip_cplus_tests] } { continue } + +standard_testfile .cc + +if [get_compiler_info "c++"] { + return -1 +} + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} { + return -1 +} + +gdb_test "print (int)byte_val" "= 128" +gdb_test "print (int)uchar_val" "= 128" -- 2.26.0