# Copyright 2002, 2007-2012 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/>.

#
# test gdb/701
#

load_lib mi-support.exp
set MIFLAGS "-i=mi"

gdb_exit
if [mi_gdb_start] {
    continue
}

standard_testfile

if {[gdb_compile $srcdir/$subdir/$srcfile $binfile executable debug] != ""} {
  untested gdb701.exp
  return -1
}

# When varobj reports the types of objects, it often isn't really reporting
# the type as GDB knows it. For example, in this testcase, we have a
# structure which has been typedefed. A varobj of this type would really have
# a type of "TYPE_CODE_TYPEDEF". It's target type is "TYPE_CODE_STRUCT". Varobj
# should skip over the TYPEDEF type when figuring out the varobj's children.
# If it doesn't, Bad Things Happen(TM).

# Run to main
mi_run_to_main

# Step over "foo = 0"
mi_next "step over \"foo = 0\""

mi_create_varobj "fooPtr" "foo" "create fooPtr"

mi_gdb_test "-var-list-children fooPtr" \
  "(&\".*\"\r\n)*\\^done,numchild=\"3\",.*" \
  "list children of fooPtr"

foreach i [list x y z] {
  mi_gdb_test "-var-list-children fooPtr.$i" \
    "(&\".*\"\r\n)*\\^done,numchild=\"0\",has_more=\"0\"" \
    "list children of fooPtr.$i"
}

mi_gdb_exit
return 0
