Browse Source
Consider the following Ada Code:
type Str is new String (1 .. 4);
My_str : Str := "ABCD";
This simply declares a 4-character string type. Trying to perform
equality tests using it currently yield an error:
(gdb) p my_str = my_str
Attempt to compare array with non-array
(gdb) p my_str = "ABCD"
Attempt to compare array with non-array
The error occurs because my_str is defined as an object whose
type is a typdef to a TYPE_CODE_ARRAY, which ada_value_equal
is not expecting at all (yet). This patch fixes this oversight.
gdb/ChangeLog:
* ada-lang.c (ada_value_equal): Add handling of typedef types
when comparing array objects.
gdb/testsuite/ChangeLog:
* gdb.ada/str_binop_equal: New testcase.
Tested on x86_64-linux.
gdb-8.1-branch
7 changed files with 124 additions and 7 deletions
@ -0,0 +1,39 @@ |
|||
# Copyright 2017 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/>. |
|||
|
|||
load_lib "ada.exp" |
|||
|
|||
standard_ada_testfile foo_p211_061 |
|||
|
|||
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { |
|||
return -1 |
|||
} |
|||
|
|||
clean_restart ${testfile} |
|||
|
|||
set bp_location [gdb_get_line_number "STOP" ${testdir}/foo_p211_061.adb] |
|||
runto "foo_p211_061.adb:$bp_location" |
|||
|
|||
gdb_test "print my_str = my_str" \ |
|||
" = true" |
|||
|
|||
gdb_test "print my_str = \"ABCD\"" \ |
|||
" = true" |
|||
|
|||
gdb_test "print my_str = \"EFGH\"" \ |
|||
" = false" |
|||
|
|||
gdb_test "print my_str = \"AB\"" \ |
|||
" = false" |
|||
@ -0,0 +1,22 @@ |
|||
-- Copyright 2017 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/>. |
|||
|
|||
with Pck; use Pck; |
|||
|
|||
procedure Foo_P211_061 is |
|||
My_Str : Str := "ABCD"; |
|||
begin |
|||
Do_Nothing (My_Str'Address); -- STOP |
|||
end Foo_P211_061; |
|||
@ -0,0 +1,22 @@ |
|||
-- Copyright 2017 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/>. |
|||
|
|||
package body Pck is |
|||
procedure Do_Nothing (A : System.Address) is |
|||
begin |
|||
null; |
|||
end Do_Nothing; |
|||
end pck; |
|||
|
|||
@ -0,0 +1,20 @@ |
|||
-- Copyright 2017 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/>. |
|||
|
|||
with System; |
|||
package Pck is |
|||
type Str is new String (1 .. 4); |
|||
procedure Do_Nothing (A : System.Address); |
|||
end pck; |
|||
Loading…
Reference in new issue