diff options
author | Tom Tromey <tromey@adacore.com> | 2022-09-08 10:35:09 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2023-01-03 08:45:01 -0700 |
commit | a7d5fcaf8e15820f997ba7774a8eef7ab7e2f2e3 (patch) | |
tree | e0ab64af55ca8a9e733beb923683d9ca31c52cdd | |
parent | 3360bae61faee3b57e4defa33cd7387be5c0dea8 (diff) | |
download | binutils-a7d5fcaf8e15820f997ba7774a8eef7ab7e2f2e3.zip binutils-a7d5fcaf8e15820f997ba7774a8eef7ab7e2f2e3.tar.gz binutils-a7d5fcaf8e15820f997ba7774a8eef7ab7e2f2e3.tar.bz2 |
Add test case for "finish" with variably-sized types
This adds a test case for "finish" with variably-sized types, and for
inferior calls as well. This also extends the "runto" proc to handle
temporary breakpoints.
-rw-r--r-- | gdb/testsuite/gdb.ada/finish-var-size.exp | 43 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/finish-var-size/p.adb | 21 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/finish-var-size/pck.adb | 21 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/finish-var-size/pck.ads | 36 | ||||
-rw-r--r-- | gdb/testsuite/lib/gdb.exp | 4 |
5 files changed, 123 insertions, 2 deletions
diff --git a/gdb/testsuite/gdb.ada/finish-var-size.exp b/gdb/testsuite/gdb.ada/finish-var-size.exp new file mode 100644 index 0000000..aab3fd6 --- /dev/null +++ b/gdb/testsuite/gdb.ada/finish-var-size.exp @@ -0,0 +1,43 @@ +# Copyright 2022 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" + +if { [skip_ada_tests] } { return -1 } + +# GCC 12 has the needed fix. +if {![test_compiler_info {gcc-1[2-9]-*}]} { + untested "GCC too told for this test" + return -1 +} + +standard_ada_testfile p + +if {[gdb_compile_ada "${srcfile}" "${binfile}" executable debug] != ""} { + return -1 +} + +clean_restart ${testfile} +runto "pck.get" temporary + +set value [string_to_regexp "= (defined => true, payload => true)"] + +# With some ABIs the return value cannot be determined. Accept this, +# or the correct result. +gdb_test "finish" \ + "Value returned .*($value|Cannot determine contents)" + +# Test that an inferior call yields the correct result. +gdb_test "print pck.get(True)" $value diff --git a/gdb/testsuite/gdb.ada/finish-var-size/p.adb b/gdb/testsuite/gdb.ada/finish-var-size/p.adb new file mode 100644 index 0000000..33d7b48 --- /dev/null +++ b/gdb/testsuite/gdb.ada/finish-var-size/p.adb @@ -0,0 +1,21 @@ +-- Copyright 2022 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 P is + V : Result_T := Get (True); +begin + null; +end P; diff --git a/gdb/testsuite/gdb.ada/finish-var-size/pck.adb b/gdb/testsuite/gdb.ada/finish-var-size/pck.adb new file mode 100644 index 0000000..884cf91 --- /dev/null +++ b/gdb/testsuite/gdb.ada/finish-var-size/pck.adb @@ -0,0 +1,21 @@ +-- Copyright 2022 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 + function Get (Value: Boolean) return Result_T is + begin + return (Defined => True, Payload => Value); + end Get; +end Pck; diff --git a/gdb/testsuite/gdb.ada/finish-var-size/pck.ads b/gdb/testsuite/gdb.ada/finish-var-size/pck.ads new file mode 100644 index 0000000..d6fcbfa --- /dev/null +++ b/gdb/testsuite/gdb.ada/finish-var-size/pck.ads @@ -0,0 +1,36 @@ +-- Copyright 2022 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 Pck is + type Array_Type is array (1 .. 64) of Integer; + + type Maybe_Array (Defined : Boolean := False) is + record + Arr : Array_Type; + Arr2 : Array_Type; + end record; + + type Result_T (Defined : Boolean := False) is + record + case Defined is + when False => + Arr : Maybe_Array; + when True => + Payload : Boolean; + end case; + end record; + + function Get (Value: Boolean) return Result_T; +end Pck; diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index f94ec1b..135ace6 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -743,13 +743,13 @@ proc runto { linespec args } { # the "at foo.c:36" output we get with -g. # the "in func" output we get without -g. gdb_expect 30 { - -re "Break.* at .*:$decimal.*$gdb_prompt $" { + -re "(?:Break|Temporary break).* at .*:$decimal.*$gdb_prompt $" { if { $print_pass } { pass $test_name } return 1 } - -re "Breakpoint $bkptno_numopt_re, \[0-9xa-f\]* in .*$gdb_prompt $" { + -re "(?:Breakpoint|Temporary breakpoint) $bkptno_numopt_re, \[0-9xa-f\]* in .*$gdb_prompt $" { if { $print_pass } { pass $test_name } |