Browse Source
Ada 2022 includes a "delta aggregates" feature that can sometimes simplify aggregate creation. This patch implements this feature for GDB.master
8 changed files with 197 additions and 5 deletions
@ -0,0 +1,49 @@ |
|||||
|
# 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 local := (pck.v1 with delta b => 23)" \ |
||||
|
[string_to_regexp " = (a => 23, b => 23)"] \ |
||||
|
"delta aggregate record" |
||||
|
|
||||
|
gdb_test "print local := (pck.v1 with delta others => 23)" \ |
||||
|
"'others' invalid in delta aggregate" \ |
||||
|
"invalid record delta aggregate" |
||||
|
|
||||
|
gdb_test "print local := (pck.v3 with delta b => 19)" \ |
||||
|
"Type mismatch in delta aggregate" \ |
||||
|
"wrong type in delta aggregate" |
||||
|
|
||||
|
gdb_test "print a := (pck.a1 with delta 2 => 7)" \ |
||||
|
[string_to_regexp " = (2, 7, 6)"] \ |
||||
|
"delta aggregate array" |
||||
|
|
||||
|
gdb_test "print a := (pck.a1 with delta others => 88)" \ |
||||
|
"'others' invalid in delta aggregate" \ |
||||
|
"invalid array delta aggregate" |
||||
@ -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 |
||||
|
Local : Record_Type := (A => 1, B => 2); |
||||
|
A : Array_Type := (1, 3, 5); |
||||
|
begin |
||||
|
Do_Nothing (Local'Address); -- STOP |
||||
|
Do_Nothing (A'Address); |
||||
|
end Main; |
||||
@ -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; |
||||
@ -0,0 +1,42 @@ |
|||||
|
-- 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 Record_Type is record |
||||
|
A : Integer; |
||||
|
B : Integer; |
||||
|
end record; |
||||
|
|
||||
|
V1 : Record_Type := (A => 23, B => 24); |
||||
|
V2 : Record_Type := (A => 47, B => 91); |
||||
|
|
||||
|
type Other_Record_Type is record |
||||
|
A : Integer; |
||||
|
B : Integer; |
||||
|
C : Integer; |
||||
|
end record; |
||||
|
|
||||
|
V3 : Other_Record_Type := (A => 47, B => 91, C => 102); |
||||
|
|
||||
|
type Array_Type is array (1 .. 3) of Integer; |
||||
|
|
||||
|
A1 : Array_Type := (2, 4, 6); |
||||
|
|
||||
|
procedure Do_Nothing (A : System.Address); |
||||
|
|
||||
|
end Pck; |
||||
Loading…
Reference in new issue