|  | # Copyright 2018-2025 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 tester | 
|  |  | 
|  | if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { | 
|  | return -1 | 
|  | } | 
|  |  | 
|  | clean_restart ${testfile} | 
|  |  | 
|  | runto "aggregates.run_test" | 
|  |  | 
|  | set kfail_int128support_re \ | 
|  | "That operation is not available on integers of more than 8 bytes\\." | 
|  |  | 
|  | set cmd \ | 
|  | [list \ | 
|  | "print pra := " \ | 
|  | "((packed_array_assign_x => 2," \ | 
|  | "packed_array_assign_y => 0," \ | 
|  | "packed_array_assign_w => 17)," \ | 
|  | "pr," \ | 
|  | "(packed_array_assign_x => 7," \ | 
|  | "packed_array_assign_y => 1," \ | 
|  | "packed_array_assign_w => 23))"] | 
|  | set cmd [join $cmd] | 
|  | set re \ | 
|  | [list \ | 
|  | " = \\(\\(packed_array_assign_w => 17," \ | 
|  | "packed_array_assign_x => 2," \ | 
|  | "packed_array_assign_y => 0\\)," \ | 
|  | "\\(packed_array_assign_w => 104," \ | 
|  | "packed_array_assign_x => 2," \ | 
|  | "packed_array_assign_y => 3\\)," \ | 
|  | "\\(packed_array_assign_w => 23," \ | 
|  | "packed_array_assign_x => 7," \ | 
|  | "packed_array_assign_y => 1\\)\\)"] | 
|  |  | 
|  | # GNAT >= 12.0 has the needed fix here. | 
|  | set zeros_expected [gnat_version_compare < 12] | 
|  | set all_zeros \ | 
|  | [string_to_regexp "((packed_array_assign_w => 0, packed_array_assign_x => 0, packed_array_assign_y => 0), (packed_array_assign_w => 0, packed_array_assign_x => 0, packed_array_assign_y => 0), (packed_array_assign_w => 0, packed_array_assign_x => 0, packed_array_assign_y => 0))"] | 
|  |  | 
|  | set re [join $re] | 
|  | gdb_test_multiple $cmd "value of pra" { | 
|  | -re -wrap $re { | 
|  | pass $gdb_test_name | 
|  | } | 
|  | -re -wrap $kfail_int128support_re { | 
|  | kfail gdb/20991 $gdb_test_name | 
|  | } | 
|  | -re -wrap $all_zeros { | 
|  | if {$zeros_expected} { | 
|  | setup_kfail "GCC 12 needed" *-*-* | 
|  | } | 
|  | fail $gdb_test_name | 
|  | } | 
|  | } | 
|  |  | 
|  | set cmd "print pra(1) := pr" | 
|  | set re \ | 
|  | [list \ | 
|  | " = \\(packed_array_assign_w => 104," \ | 
|  | "packed_array_assign_x => 2," \ | 
|  | "packed_array_assign_y => 3\\)"] | 
|  | set re [join $re] | 
|  | gdb_test_multiple $cmd "" { | 
|  | -re -wrap $re { | 
|  | pass $gdb_test_name | 
|  | } | 
|  | -re -wrap $kfail_int128support_re { | 
|  | kfail gdb/20991 $gdb_test_name | 
|  | } | 
|  | } | 
|  |  | 
|  | set cmd "print pra(1)" | 
|  | set re \ | 
|  | [list \ | 
|  | " = \\(packed_array_assign_w => 104," \ | 
|  | "packed_array_assign_x => 2," \ | 
|  | "packed_array_assign_y => 3\\)"] | 
|  | set re [join $re] | 
|  | gdb_test_multiple $cmd "" { | 
|  | -re -wrap $re { | 
|  | pass $gdb_test_name | 
|  | } | 
|  | -re -wrap $kfail_int128support_re { | 
|  | kfail gdb/20991 $gdb_test_name | 
|  | } | 
|  | } | 
|  |  | 
|  | gdb_test "print npr := (q000 => 3, r000 => (packed_array_assign_x => 6, packed_array_assign_y => 1, packed_array_assign_w => 117))" \ | 
|  | " = \\(q000 => 3, r000 => \\(packed_array_assign_w => 117, packed_array_assign_x => 6, packed_array_assign_y => 1\\)\\)" \ | 
|  | "value of npr" |