From: Andrew Burgess <andrew.burgess@embecosm.com>
To: gdb-patches@sourceware.org
Cc: Richard Bunt <Richard.Bunt@arm.com>,
Andrew Burgess <andrew.burgess@embecosm.com>
Subject: [PATCH 4/8] gdb/fortran: better types for components of complex numbers
Date: Mon, 18 Mar 2019 12:52:00 -0000 [thread overview]
Message-ID: <cd44931e8b401f99d5b7252c33de3c9c7de83401.1552913183.git.andrew.burgess@embecosm.com> (raw)
In-Reply-To: <cover.1552913183.git.andrew.burgess@embecosm.com>
In-Reply-To: <cover.1552913183.git.andrew.burgess@embecosm.com>
When creating a complex number in Fortran, the types of the components
should use the standard Fortran type names rather than the C type
names.
Special case the DWARF parser to use more appropriate types when
creating a complex type for Fortran.
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/f-typeprint.c | 29 +++++++++++++++++++++++
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 +++++++++++++++++++++++++++++++++++
7 files changed, 145 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/ChangeLog b/gdb/ChangeLog
index 6fcb1c630be..51bbc6ad333 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2019-03-18 Andrew Burgess <andrew.burgess@embecosm.com>
+ Chris January <chris.january@arm.com>
+
+ * dwarf2read.c (dwarf2_init_complex_target_type): Use different
+ types for Fortran.
+
2019-03-18 Andrew Burgess <andrew.burgess@embecosm.com>
Chris January <chris.january@arm.com>
David Lecomber <david.lecomber@arm.com>
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index d865ff1a2b2..f7cb7ed12f1 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/f-typeprint.c b/gdb/f-typeprint.c
index 2dfae5803cd..30e0c4dcda1 100644
--- a/gdb/f-typeprint.c
+++ b/gdb/f-typeprint.c
@@ -400,6 +400,35 @@ f_type_print_base (struct type *type, struct ui_file *stream, int show,
fprintfi_filtered (level, stream, "module %s", TYPE_NAME (type));
break;
+ case TYPE_CODE_FLT:
+ /* In the case where the float was extracted from a complex number
+ then the component part will not have a name set. Provide a
+ suitable name here.
+
+ QUESTION: Maybe we should be forcing the type name in the DWARF
+ parser rather than fixing up the missing name at the last minute?
+ I couldn't see any precedent for such fixing up though. */
+ if (TYPE_NAME (type) != NULL)
+ fprintfi_filtered (level, stream, "%s", TYPE_NAME (type));
+ else
+ {
+ gdbarch *gdbarch = get_type_arch (type);
+ switch (TYPE_LENGTH (type))
+ {
+ case 4:
+ type = builtin_f_type (gdbarch)->builtin_real;
+ break;
+ case 8:
+ type = builtin_f_type (gdbarch)->builtin_real_s8;
+ break;
+ case 16:
+ type = builtin_f_type (gdbarch)->builtin_real_s16;
+ break;
+ }
+ fprintfi_filtered (level, stream, "%s", TYPE_NAME (type));
+ }
+ break;
+
default_case:
default:
/* Handle types not explicitly handled by the other cases,
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 31541d86374..83883cefd1e 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2019-03-18 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ * gdb.fortran/complex.exp: Expand.
+ * gdb.fortran/complex.f: Renamed to...
+ * gdb.fortran/complex.f90: ...this, and extended to add more
+ complex values.
+
2019-03-18 Andrew Burgess <andrew.burgess@embecosm.com>
* gdb.fortran/intrinsics.exp: Extend to cover MOD, CEILING, FLOOR,
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 <http://www.gnu.org/licenses/>.
-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 <http://www.gnu.org/licenses/>.
-
- 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 <http://www.gnu.org/licenses/>.
+
+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
next prev parent reply other threads:[~2019-03-18 12:52 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-02 23:58 [PATCHv2 0/8] Series of Fortran type printing patches Andrew Burgess
2019-03-18 12:52 ` [PATCH " Andrew Burgess
2019-03-18 12:52 ` [PATCH 5/8] gdb/fortran: Print 'void' type in lower case Andrew Burgess
2019-03-18 12:52 ` [PATCH 1/8] gdb: Add $_cimag and $_creal internal functions Andrew Burgess
2019-03-18 17:20 ` Eli Zaretskii
2019-03-29 22:41 ` Andrew Burgess
2019-03-30 7:15 ` Eli Zaretskii
2019-03-19 19:47 ` Tom Tromey
2019-04-12 20:24 ` New FAIL on gdb.base/complex-parts.exp - unix/-m32 (was: Re: [PATCH 1/8] gdb: Add $_cimag and $_creal internal functions) Sergio Durigan Junior
2019-04-13 0:02 ` Andrew Burgess
2019-04-16 18:30 ` New FAIL on gdb.base/complex-parts.exp - unix/-m32 Tom Tromey
2019-04-17 0:03 ` Andrew Burgess
2019-03-18 12:52 ` [PATCH 8/8] gdb/fortran: Add allocatable type qualifier Andrew Burgess
2019-03-18 12:52 ` [PATCH 2/8] gdb/fortran: Handle internal function calls Andrew Burgess
2019-03-19 19:52 ` Tom Tromey
2019-03-18 12:52 ` Andrew Burgess [this message]
2019-03-19 20:18 ` [PATCH 4/8] gdb/fortran: better types for components of complex numbers Tom Tromey
2019-03-18 12:52 ` [PATCH 7/8] gdb/fortran: Update rules for printing whitespace in types Andrew Burgess
2019-03-18 12:52 ` [PATCH 6/8] gdb/fortran: print function arguments when printing function type Andrew Burgess
2019-03-18 12:52 ` [PATCH 3/8] gdb/fortran: Additional builtin procedures Andrew Burgess
2019-03-19 20:06 ` Tom Tromey
2019-03-19 20:27 ` [PATCH 0/8] Series of Fortran type printing patches Tom Tromey
2019-04-02 23:58 ` [PATCHv2 1/8] gdb: Remove an unbalanced stray double quote from a comment Andrew Burgess
2019-04-02 23:58 ` [PATCHv2 2/8] gdb/fortran: Introduce fortran-operator.def file Andrew Burgess
2019-04-02 23:58 ` [PATCHv2 3/8] gdb/fortran: Additional builtin procedures Andrew Burgess
2019-04-02 23:59 ` [PATCHv2 5/8] gdb/fortran: Print 'void' type in lower case Andrew Burgess
2019-04-02 23:59 ` [PATCHv2 8/8] gdb/fortran: Add allocatable type qualifier Andrew Burgess
2019-04-02 23:59 ` [PATCHv2 4/8] gdb/fortran: better types for components of complex numbers Andrew Burgess
2019-05-03 0:21 ` Regression on gdb.fortran/complex.exp on unix/-m32 (was: Re: [PATCHv2 4/8] gdb/fortran: better types for components of complex numbers) Sergio Durigan Junior
2019-04-02 23:59 ` [PATCHv2 6/8] gdb/fortran: print function arguments when printing function type Andrew Burgess
2019-04-02 23:59 ` [PATCHv2 7/8] gdb/fortran: Update rules for printing whitespace in types Andrew Burgess
2019-04-23 22:16 ` [PATCHv2 0/8] Series of Fortran type printing patches Andrew Burgess
2019-04-24 19:19 ` Tom Tromey
2019-04-30 12:37 ` Andrew Burgess
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=cd44931e8b401f99d5b7252c33de3c9c7de83401.1552913183.git.andrew.burgess@embecosm.com \
--to=andrew.burgess@embecosm.com \
--cc=Richard.Bunt@arm.com \
--cc=gdb-patches@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