1 # Copyright (C) 2012-2020 Free Software Foundation, Inc.
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.
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.
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/>.
16 # This file is part of the GDB testsuite. It tests the mechanism
17 # exposing rvalue reference values to Python. It is based on
18 # gdb.python/py-value-cc.exp.
20 if {[skip_cplus_tests]} { continue }
24 if {[prepare_for_testing $testfile.exp $testfile $srcfile \
25 {debug c++ additional_flags="-std=c++11"}]} {
29 # Skip all tests if Python scripting is not enabled.
30 if {[skip_python_tests]} { continue }
33 untested "couldn't run to main"
37 gdb_breakpoint [gdb_get_line_number "Break here."]
38 gdb_continue_to_breakpoint "Break here" ".*Break here.*"
40 gdb_test "python print (str(gdb.parse_and_eval(\"int_rref\").type))" "int &&"
41 gdb_test "python print (str(gdb.parse_and_eval(\"int_rref\").referenced_value().type))" "int"
42 gdb_test "python print (str(gdb.parse_and_eval(\"int_rref\").referenced_value()))" "10"
44 gdb_test "python print (str(gdb.parse_and_eval(\"int_ptr_rref\").dereference().type))" "int"
45 gdb_test "python print (str(gdb.parse_and_eval(\"int_ptr_rref\").referenced_value().type))" "int_ptr"
46 gdb_test "python print (str(gdb.parse_and_eval(\"int_ptr_rref\").referenced_value().dereference()))" "10"
47 gdb_test "python print (str(gdb.parse_and_eval(\"int_ptr_rref\").referenced_value().referenced_value()))" "10"
49 gdb_test_no_output "python b = gdb.parse_and_eval('b')" "init b"
50 gdb_test_no_output "python b_rref = gdb.parse_and_eval('b_rref')" "init b_rref"
51 gdb_test_no_output "python b_fields = b.type.fields()" "init b_fields"
53 gdb_test "python print(b_rref\[b_fields\[1\]\])" "98 'b'" "b_rref.a via field"
54 gdb_test "python print(b_rref\[b_fields\[0\]\].type.target())" "A" \
55 "type of b_rref's base class via field"
56 gdb_test "python print(b_rref\[b_fields\[0\]\]\['a'\])" "100" \
57 "b_rref.A::a via field"