diff options
author | Tom Tromey <tromey@adacore.com> | 2024-03-05 07:59:55 -0700 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2024-04-02 11:24:27 -0600 |
commit | 542ea7fe46deb713268364fa7b1a3333360e1044 (patch) | |
tree | dd60ed83af06b59536e6bef47e61f7dfedbdb1cc /gdb/testsuite | |
parent | d9d782dd8b6c3665c28f6b610175a0756a7805a4 (diff) | |
download | gdb-542ea7fe46deb713268364fa7b1a3333360e1044.zip gdb-542ea7fe46deb713268364fa7b1a3333360e1044.tar.gz gdb-542ea7fe46deb713268364fa7b1a3333360e1044.tar.bz2 |
Implement Ada 2022 iterated assignment
Ada 2022 includes iterated assignment for array initialization. This
patch implements a subset of this for gdb. In particular, only arrays
with integer index types really work -- currently there's no decent
way to get the index type in EVAL_AVOID_SIDE_EFFECTS mode during
parsing. Fixing this probably requires the Ada parser to take a
somewhat more sophisticated approach to type resolution; and while
this would help fix another bug in this area, this patch is already
useful without it.
Diffstat (limited to 'gdb/testsuite')
-rw-r--r-- | gdb/testsuite/gdb.ada/iterated-assign.exp | 37 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/iterated-assign/main.adb | 24 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/iterated-assign/pck.adb | 23 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/iterated-assign/pck.ads | 26 |
4 files changed, 110 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.ada/iterated-assign.exp b/gdb/testsuite/gdb.ada/iterated-assign.exp new file mode 100644 index 0000000..76b038f --- /dev/null +++ b/gdb/testsuite/gdb.ada/iterated-assign.exp @@ -0,0 +1,37 @@ +# Copyright 2024 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" + +require allow_ada_tests + +standard_ada_testfile main + +if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { + return -1 +} + +clean_restart ${testfile} + +set bp_location [gdb_get_line_number "STOP" ${testdir}/main.adb] +runto "main.adb:$bp_location" + +gdb_test "print a1 := (for i in 1..4 => 2 * i + 1)" \ + " = \\(3, 5, 7, 9\\)" \ + "simple iterated assignment" + +gdb_test "print a2 := (for i in 1..2 => (for j in 1..2 => 3 * i + j))" \ + " = \\(\\(4, 5\\), \\(7, 8\\)\\)" \ + "nested iterated assignment" diff --git a/gdb/testsuite/gdb.ada/iterated-assign/main.adb b/gdb/testsuite/gdb.ada/iterated-assign/main.adb new file mode 100644 index 0000000..239c22c --- /dev/null +++ b/gdb/testsuite/gdb.ada/iterated-assign/main.adb @@ -0,0 +1,24 @@ +-- Copyright 2024 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 Main is + A1 : Other_Array_Type := (2, 4, 6, 8); + A2 : MD_Array_Type := ((1, 2), (3, 4)); +begin + Do_Nothing (A1'Address); -- STOP + Do_Nothing (A2'Address); +end Main; diff --git a/gdb/testsuite/gdb.ada/iterated-assign/pck.adb b/gdb/testsuite/gdb.ada/iterated-assign/pck.adb new file mode 100644 index 0000000..14580e6 --- /dev/null +++ b/gdb/testsuite/gdb.ada/iterated-assign/pck.adb @@ -0,0 +1,23 @@ +-- Copyright 2024 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; diff --git a/gdb/testsuite/gdb.ada/iterated-assign/pck.ads b/gdb/testsuite/gdb.ada/iterated-assign/pck.ads new file mode 100644 index 0000000..b77af72 --- /dev/null +++ b/gdb/testsuite/gdb.ada/iterated-assign/pck.ads @@ -0,0 +1,26 @@ +-- Copyright 2024 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 Other_Array_Type is array (1 .. 4) of Integer; + + type MD_Array_Type is array (1 .. 2, 1 .. 2) of Integer; + + procedure Do_Nothing (A : System.Address); + +end Pck; |