#   Copyright (C) 2004 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

# Test that the mi output for a bitfield with anonymous elements works correctly.
#
# Written by Jim Ingham <jingham@apple.com>
# 

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

gdb_exit
if [mi_gdb_start] {
    continue
}

set testfile "anon-bitfield"
set srcfile ${testfile}.cc

set binfile ${objdir}/${subdir}/${testfile}
if  { [gdb_compile "$srcdir/$subdir/$srcfile" "${binfile}" executable {c++ debug}] != "" } {
    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

mi_delete_breakpoints
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load ${binfile}

mi_run_to_main
mi_next {Next so mine is initialized}

mi_gdb_test "-var-create - * mine" {.*name="var1",numchild="1",type="Foo",typecode="STRUCT".*} {create variable for mine}
mi_gdb_test "-var-list-children var1" {(.*numchild="4",children=\[child=\{name="var1.public.f1",exp="f1".*\},child=\{name="var1.public.(\#anon\#[0-9])",exp="".*\},child=\{name="var1.public.f2",exp="f2".*\},child=\{name="var1.public.(\#anon\#[0-9])",exp="".*\}\])|(.*numchild="2",children=\[child=\{name="var1.public.f1",exp="f1".*\},child=\{name="var1.public.f2",exp="f2".*\}\])} {list children of mine}
mi_gdb_test "-var-evaluate-expression var1.public.f1" {value="1 '\\\\001'"} {get value of mine.f1}
mi_gdb_test "-var-evaluate-expression var1.public.f2" {value="5 '\\\\005'"} {get value of mine.f2}

mi_gdb_exit
return 0
