Commit | Line | Data |
---|---|---|
b811d2c2 | 1 | # Copyright 2008-2020 Free Software Foundation, Inc. |
961f4160 PMR |
2 | # |
3 | # This program is free software; you can redistribute it and/or modify | |
4 | # it under the terms of the GNU General Public License as published by | |
5 | # the Free Software Foundation; either version 3 of the License, or | |
6 | # (at your option) any later version. | |
7 | # | |
8 | # This program is distributed in the hope that it will be useful, | |
9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 | # GNU General Public License for more details. | |
12 | # | |
13 | # You should have received a copy of the GNU General Public License | |
14 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
15 | ||
16 | load_lib "ada.exp" | |
17 | ||
18 | standard_ada_testfile foo | |
19 | ||
dac2fef7 TT |
20 | # Note we don't test the "none" (no -fgnat-encodings option) scenario |
21 | # here, because "all" and "minimal" cover the cases, and this way we | |
22 | # don't have to update the test when gnat changes its default. | |
23 | foreach_with_prefix scenario {all minimal} { | |
24 | set flags [list debug additional_flags=-fgnat-encodings=$scenario] | |
961f4160 | 25 | |
dac2fef7 TT |
26 | if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $flags] != ""} { |
27 | return -1 | |
f20ff837 | 28 | } |
dac2fef7 TT |
29 | |
30 | clean_restart ${testfile} | |
31 | ||
32 | set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.adb] | |
33 | runto "foo.adb:$bp_location" | |
34 | ||
35 | # Test printing and type-printing of a discriminated record that a function | |
36 | # returns by reference. | |
37 | ||
38 | # Currently, GCC describes such functions as returning pointers (instead of | |
39 | # references). | |
40 | set pass_re [multi_line "type = <ref> record" \ | |
41 | " n: natural;" \ | |
42 | " s: access array \\(1 \\.\\. n\\) of character;" \ | |
43 | "end record"] | |
44 | # With DWARF we get debuginfo that could in theory show "1..n" for | |
45 | # the range: | |
46 | # <3><1230>: Abbrev Number: 15 (DW_TAG_member) | |
47 | # <1231> DW_AT_name : n | |
48 | # ... | |
49 | # <4><1257>: Abbrev Number: 18 (DW_TAG_subrange_type) | |
50 | # <1258> DW_AT_type : <0x126e> | |
51 | # <125c> DW_AT_upper_bound : <0x1230> | |
52 | # However, we don't currently record the needed information in the | |
53 | # location batons. In the meantime, we accept and kfail the | |
54 | # compromise output. | |
55 | set dwarf_kfail_re [multi_line "type = <ref> record" \ | |
56 | " n: natural;" \ | |
57 | " s: array \\(<>\\) of character;" \ | |
58 | "end record"] | |
59 | set unsupported_re [multi_line "type = access record" \ | |
60 | " n: natural;" \ | |
61 | " s: access array \\(1 \\.\\. n\\) of character;" \ | |
62 | "end record"] | |
63 | set supported 1 | |
ba3e70b0 | 64 | gdb_test_multiple "ptype get(\"Hello world!\")" "" { |
dac2fef7 TT |
65 | -re -wrap $pass_re { |
66 | pass $gdb_test_name | |
67 | } | |
68 | -re -wrap $dwarf_kfail_re { | |
69 | if {$scenario == "minimal"} { | |
70 | setup_kfail "symbolic names in location batons" *-*-* | |
71 | } | |
72 | fail $gdb_test_name | |
73 | set supported 0 | |
74 | } | |
75 | -re -wrap $unsupported_re { | |
76 | unsupported $gdb_test_name | |
77 | set supported 0 | |
78 | } | |
f20ff837 | 79 | } |
f20ff837 | 80 | |
dac2fef7 TT |
81 | if { $supported == 0 } { |
82 | return 0 | |
83 | } | |
f20ff837 | 84 | |
ba3e70b0 | 85 | gdb_test "p get(\"Hello world!\")" \ |
dac2fef7 TT |
86 | "= \\(n => 12, s => \"Hello world!\"\\)" |
87 | } |