| # Copyright (C) 2018-2021 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/>. |
| |
| # Tests whether -var-info-path-expression fails as documented when |
| # invoked on a dynamic varobj. |
| |
| load_lib mi-support.exp |
| set MIFLAGS "-i=mi" |
| |
| # |
| # Start here |
| # |
| standard_testfile |
| |
| if {[gdb_compile "$srcdir/$subdir/$srcfile" $binfile executable {debug}] != "" } { |
| return -1 |
| } |
| |
| mi_clean_restart $binfile |
| |
| # Skip all tests if Python scripting is not enabled. |
| if { [mi_skip_python_tests] } { continue } |
| |
| set pyfile [gdb_remote_download host ${srcdir}/${subdir}/${testfile}.py] |
| mi_gdb_test "source ${pyfile}" \ |
| ".*\\^done" \ |
| "load python file" |
| |
| mi_gdb_test "-enable-pretty-printing" \ |
| "\\^done" \ |
| "-enable-pretty-printing" |
| |
| mi_gdb_test "set python print-stack full" \ |
| ".*\\^done" \ |
| "set python print-stack full" |
| |
| mi_runto_main |
| |
| mi_continue_to_line [gdb_get_line_number "next line" ${srcfile}] \ |
| "step to breakpoint" |
| |
| mi_gdb_test "-var-create c1 * &c1" \ |
| "\\^done.*" \ |
| "-var-create c1 * &c1" |
| |
| mi_gdb_test "-var-info-path-expression c1" \ |
| "\\^done,path_expr=\"&c1\"" \ |
| "-var-info-path-expression c1" |
| |
| mi_gdb_test "-var-list-children c1" \ |
| "\\^done,numchild=\"2\",children=.child=\{name=\"c1.car\".*child=\{name=\"c1.cdr\".*" \ |
| "-var-list-children c1" |
| |
| mi_gdb_test "-var-info-path-expression c1.cdr" \ |
| "\\^error,msg=\".*\"" \ |
| "-var-info-path-expression c1.cdr" |
| |
| mi_gdb_test "-var-list-children c1.cdr" \ |
| "\\^done,numchild=\"2\",children=.child=\{name=\"c1.cdr.car\".*child=\{name=\"c1.cdr.cdr\".*" \ |
| "-var-list-children c1.cdr" |
| |
| mi_gdb_test "-var-info-path-expression c1.cdr.cdr" \ |
| "\\^error,msg=\".*\"" \ |
| "-var-info-path-expression c1.cdr.cdr" |
| |
| mi_gdb_test "-var-list-children c1.car" \ |
| "\\^done,numchild=\"1\",children=.child=\{name=\"c1.car.atom\".*" \ |
| "-var-list-children c1.car" |
| |
| mi_gdb_test "-var-list-children c1.car.atom" \ |
| "\\^done,numchild=\"1\",children=.child=\{name=\"c1.car.atom.ival\".*" \ |
| "-var-list-children c1.car.atom" |
| |
| mi_gdb_test "-var-info-path-expression c1.car.atom.ival" \ |
| "\\^error,msg=\".*\"" \ |
| "-var-info-path-expression c1.car.atom.ival" |
| |
| |
| # Regression test for a crasher that would occur when deleting a |
| # varobj that held an iterator that hadn't yet been completed. |
| # See PR varobj/28131. |
| mi_gdb_test "-var-create c1_again * &c1" \ |
| "\\^done.*" \ |
| "-var-create c1_again * &c1" |
| mi_gdb_test "-var-list-children c1_again 0 1" \ |
| "\\^done,numchild=\"1\",children=.child=\{name=\"c1_again.car\".*" \ |
| "-var-list-children c1_again" |
| mi_delete_varobj c1_again "delete c1_again" |