# This testcase is part of GDB, the GNU debugger.

# Copyright 2010-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 bug report 11530.
# This is a problem related unnamed unions.

set testfile "gdb11530"
set binfile ${testfile}${EXEEXT}

# Unnamed union is a GNU extension, thus we restrict the test
# to gcc compiler.

if [get_compiler_info] {
    return -1;
}

if { ![test_compiler_info gcc*] } {
    return 0;
}

if { [prepare_for_testing $testfile.exp $testfile $testfile.c {debug}] } {
    return -1;
}


if { ![runto main] } then {
    fail "run to main"
    return
}

gdb_test "print a.i" " = 0"
gdb_test "print sizeof (a.i)" " = \[0-9\]+"
gdb_test "print sizeof (a.i) == sizeof (int)" " = 1"

