From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 73098 invoked by alias); 3 May 2019 00:21:53 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 73090 invoked by uid 89); 3 May 2019 00:21:52 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-14.7 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,SPF_HELO_PASS autolearn=ham version=3.3.1 spammy=Renamed, tuesday, Tuesday X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 03 May 2019 00:21:50 +0000 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id AA08830832E1; Fri, 3 May 2019 00:21:49 +0000 (UTC) Received: from localhost (unused-10-15-17-196.yyz.redhat.com [10.15.17.196]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6DC29197FF; Fri, 3 May 2019 00:21:49 +0000 (UTC) From: Sergio Durigan Junior To: Andrew Burgess Cc: gdb-patches@sourceware.org, Richard Bunt Subject: Regression on gdb.fortran/complex.exp on unix/-m32 (was: Re: [PATCHv2 4/8] gdb/fortran: better types for components of complex numbers) References: Date: Fri, 03 May 2019 00:21:00 -0000 In-Reply-To: (Andrew Burgess's message of "Wed, 3 Apr 2019 00:58:38 +0100") Message-ID: <875zqspeua.fsf_-_@redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes X-SW-Source: 2019-05/txt/msg00060.txt.bz2 On Tuesday, April 02 2019, Andrew Burgess wrote: > Currently when using $_creal and $_cimag to access the components of a > complex number the types of these components will have C type names > 'float', 'double', etc. This is because the components of a complex > number are not given type names in DWARF, so GDB has to pick some > suitable names, and currently we always use the C names. > > This commit changes the type names used based on the language, so for > Fortran we will now use the Fortran float types, and so will get the > Fortran float type names 'real', 'real*8', etc. Hi Andrew, This patch has caused a regression when testing a 64-bit against a unix/-m32 board: print c16 $5 = (../../binutils-gdb/gdb/target-float.c:2228: internal-error: target_float_ops_kind get_target_float_ops_kind(const type*): unexpected type code A problem internal to GDB has been detected, further debugging may prove unreliable. Quit this debugging session? (y or n) KFAIL: gdb.fortran/complex.exp: print c16 (GDB internal error) (PRMS: gdb/18644) Resyncing due to internal error. n This is a bug, please report it. For instructions, see: . ../../binutils-gdb/gdb/target-float.c:2228: internal-error: target_float_ops_kind get_target_float_ops_kind(const type*): unexpected type code A problem internal to GDB has been detected, further debugging may prove unreliable. Create a core file of GDB? (y or n) n Command aborted. I haven't been able to investigate more, sorry. Thanks, > gdb/ChangeLog: > > * dwarf2read.c (dwarf2_init_complex_target_type): Use different > types for Fortran. > > gdb/testsuite/ChangeLog: > > * gdb.fortran/complex.exp: Expand. > * gdb.fortran/complex.f: Renamed to... > * gdb.fortran/complex.f90: ...this, and extended to add more > complex values. > --- > gdb/ChangeLog | 6 +++++ > gdb/dwarf2read.c | 35 +++++++++++++++++++++------- > gdb/testsuite/ChangeLog | 7 ++++++ > gdb/testsuite/gdb.fortran/complex.exp | 41 +++++++++++++++++++++++++------- > gdb/testsuite/gdb.fortran/complex.f | 24 ------------------- > gdb/testsuite/gdb.fortran/complex.f90 | 44 +++++++++++++++++++++++++++++++++++ > 6 files changed, 116 insertions(+), 41 deletions(-) > delete mode 100644 gdb/testsuite/gdb.fortran/complex.f > create mode 100644 gdb/testsuite/gdb.fortran/complex.f90 > > diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c > index 8881a1e28a8..1277b8acb53 100644 > --- a/gdb/dwarf2read.c > +++ b/gdb/dwarf2read.c > @@ -17547,16 +17547,35 @@ dwarf2_init_complex_target_type (struct dwarf2_cu *cu, > gdbarch *gdbarch = get_objfile_arch (objfile); > struct type *tt = nullptr; > > - switch (bits) > + switch (cu->language) > { > - case 32: > - tt = builtin_type (gdbarch)->builtin_float; > - break; > - case 64: > - tt = builtin_type (gdbarch)->builtin_double; > + case language_fortran: > + switch (bits) > + { > + case 32: > + tt = builtin_f_type (gdbarch)->builtin_real; > + break; > + case 64: > + tt = builtin_f_type (gdbarch)->builtin_real_s8; > + break; > + case 128: > + tt = builtin_f_type (gdbarch)->builtin_real_s16; > + break; > + } > break; > - case 128: > - tt = builtin_type (gdbarch)->builtin_long_double; > + default: > + switch (bits) > + { > + case 32: > + tt = builtin_type (gdbarch)->builtin_float; > + break; > + case 64: > + tt = builtin_type (gdbarch)->builtin_double; > + break; > + case 128: > + tt = builtin_type (gdbarch)->builtin_long_double; > + break; > + } > break; > } > > diff --git a/gdb/testsuite/gdb.fortran/complex.exp b/gdb/testsuite/gdb.fortran/complex.exp > index 3fbbf7154d9..136f1c4df79 100644 > --- a/gdb/testsuite/gdb.fortran/complex.exp > +++ b/gdb/testsuite/gdb.fortran/complex.exp > @@ -13,7 +13,7 @@ > # You should have received a copy of the GNU General Public License > # along with this program. If not, see . > > -standard_testfile .f > +standard_testfile .f90 > > if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug f90 quiet}]} { > return -1 > @@ -24,13 +24,36 @@ if ![runto MAIN__] then { > continue > } > > -set bp_location [gdb_get_line_number "stop"] > -gdb_test "break $bp_location" \ > - "Breakpoint.*at.* file .*$srcfile, line $bp_location\\." \ > - "breakpoint at stop" > > -gdb_test "continue" \ > - "Continuing\\..*Breakpoint.*" \ > - "continue to breakpoint" > +gdb_breakpoint [gdb_get_line_number "stop"] > +gdb_continue_to_breakpoint "continue" > + > +gdb_test "print c" " = \\(1000,-50\\)" > +gdb_test "print c4" " = \\(1000,-50\\)" > +gdb_test "print c8" " = \\(321,-22\\)" > +gdb_test "print dc" " = \\(321,-22\\)" > + > +setup_kfail gdb/18644 "*-*-*" > +gdb_test "print c16" " = \\(-874,19\\)" > + > +gdb_test "whatis c" "type = complex\\(kind=4\\)" > +gdb_test "print \$_creal (c)" " = 1000" > +gdb_test "whatis \$" " = real" > + > +gdb_test "whatis c4" "type = complex\\(kind=4\\)" > +gdb_test "print \$_creal (c4)" " = 1000" > +gdb_test "whatis \$" " = real" > + > +gdb_test "whatis c8" "type = complex\\(kind=8\\)" > +gdb_test "print \$_creal (c8)" " = 321" > +gdb_test "whatis \$" " = real\\*8" > + > +gdb_test "whatis dc" "type = complex\\(kind=8\\)" > +gdb_test "print \$_creal (dc)" " = 321" > +gdb_test "whatis \$" " = real\\*8" > + > +gdb_test "whatis c16" "type = complex\\(kind=16\\)" > +setup_kfail gdb/18644 "*-*-*" > +gdb_test "print \$_creal (c16)" " = -874" > +gdb_test "whatis \$" " = real\\*16" > > -gdb_test "print c" "\\\$$decimal = \\(1000,-50\\)" > diff --git a/gdb/testsuite/gdb.fortran/complex.f b/gdb/testsuite/gdb.fortran/complex.f > deleted file mode 100644 > index 2f1a7879f9e..00000000000 > --- a/gdb/testsuite/gdb.fortran/complex.f > +++ /dev/null > @@ -1,24 +0,0 @@ > -c Copyright 2007-2019 Free Software Foundation, Inc. > - > -c This program is free software; you can redistribute it and/or modify > -c it under the terms of the GNU General Public License as published by > -c the Free Software Foundation; either version 3 of the License, or > -c (at your option) any later version. > -c > -c This program is distributed in the hope that it will be useful, > -c but WITHOUT ANY WARRANTY; without even the implied warranty of > -c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > -c GNU General Public License for more details. > -c > -c You should have received a copy of the GNU General Public License > -c along with this program. If not, see . > - > - real*8 a,b > - complex*16 c > - > - a = 1000 > - b = -50 > - c = cmplx(a,b) > - write(*,*) s > - stop > - end > diff --git a/gdb/testsuite/gdb.fortran/complex.f90 b/gdb/testsuite/gdb.fortran/complex.f90 > new file mode 100644 > index 00000000000..2b88c1ee0bb > --- /dev/null > +++ b/gdb/testsuite/gdb.fortran/complex.f90 > @@ -0,0 +1,44 @@ > +! Copyright 2007-2019 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 . > + > +program test_complex > + real*4 r4a, r4b > + real*8 r8a, r8b > + real*16 r16a, r16b > + > + complex c > + complex(kind=4) c4 > + complex(kind=8) c8 > + double complex dc > + complex(kind=16) c16 > + > + r4a = 1000 > + r4b = -50 > + r8a = 321 > + r8b = -22 > + r16a = -874 > + r16b = 19 > + > + c = cmplx(r4a,r4b) > + c4 = cmplx(r4a,r4b) > + c8 = cmplx(r8a, r8b) > + dc = cmplx(r8a, r8b) > + c16 = cmplx(r16a, r16b) > + > + print *, c, c4, c8, dc, c16 ! stop > + print *, r4a, r4b > + print *, r8a, r8b > + print *, r16a, r16b > +end program test_complex > -- > 2.14.5 -- Sergio GPG key ID: 237A 54B1 0287 28BF 00EF 31F4 D0EB 7628 65FC 5E36 Please send encrypted e-mail if possible http://sergiodj.net/