diff options
author | Joel Brobecker <brobecker@gnat.com> | 2010-04-20 22:38:02 +0000 |
---|---|---|
committer | Joel Brobecker <brobecker@gnat.com> | 2010-04-20 22:38:02 +0000 |
commit | be9425454f2d15a1c2512faa81de8777731aa4af (patch) | |
tree | 9fc150bb4e31828ff0ee4f553085b80b551fb83c /gdb/testsuite/gdb.ada | |
parent | 1ca8fce0468fd95a151c232ce91cd181eab5d4fe (diff) | |
download | gdb-be9425454f2d15a1c2512faa81de8777731aa4af.zip gdb-be9425454f2d15a1c2512faa81de8777731aa4af.tar.gz gdb-be9425454f2d15a1c2512faa81de8777731aa4af.tar.bz2 |
"unsupported language" error in info types when using Ada.
This implements a rudimentary version of the la_print_typedef method
for Ada. Ada usually does not use typedefs, but there is one exception:
pointers to unconstrained arrays. Without this patch, we sometimes
get an error in the "info types" output:
(gdb) info types new_integer_type
All types matching regular expression "new_integer_type":
File foo.adb:
Language not supported.
For now, we treat the typedef as if it did not exist - using the
underlying type instead. This is the right thing to do for most cases,
the only exception being access to array types. Since we already have
a general issue in handling these pointers (we confuse them with fat
pointers), we will enhance ada_print_typedef to handle these pointers
at the same time we address the general issue.
gdb/ChangeLog:
* ada-typeprint.c (ada_print_typedef): New function.
* ada-lang.h (ada_print_typedef): Add declaration.
* ada-lang.c (ada_language_defn): set la_print_typdef field
to ada_print_typedef.
gdb/testsuite/ChangeLog:
* info_types.c, info_types.exp: New files.
Tested on x86_64-linux.
Diffstat (limited to 'gdb/testsuite/gdb.ada')
-rw-r--r-- | gdb/testsuite/gdb.ada/info_types.c | 35 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/info_types.exp | 31 |
2 files changed, 66 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.ada/info_types.c b/gdb/testsuite/gdb.ada/info_types.c new file mode 100644 index 0000000..c7fd3f4 --- /dev/null +++ b/gdb/testsuite/gdb.ada/info_types.c @@ -0,0 +1,35 @@ +/* This test program is part of GDB, the GNU debugger. + + Copyright 2010 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/>. + */ + +typedef int new_integer_type; + +void +do_something (int *val) +{ + *val = *val + 1; +} + +int +main (void) +{ + new_integer_type toto = 30; + + do_something(&toto); + return 0; +} + diff --git a/gdb/testsuite/gdb.ada/info_types.exp b/gdb/testsuite/gdb.ada/info_types.exp new file mode 100644 index 0000000..a62da35 --- /dev/null +++ b/gdb/testsuite/gdb.ada/info_types.exp @@ -0,0 +1,31 @@ +# Copyright 2010 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/>. + +set testfile info_types +set srcfile ${testfile}.c +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } { + return -1 +} + +# Force the language to Ada. We used a C program because it was trivial +# to get a typedef type, but the situation we are trying to reproduce is +# when the Ada language is being used. +gdb_test "set lang ada" "" + +set eol "\[\r\n\]+" + +gdb_test "info types new_integer_type" \ + "All types matching regular expression \"new_integer_type\":${eol}File .*info_types.c:${eol}int" + |