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

# Copyright 2010-2020 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.

standard_testfile

# 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 "failed to prepare" $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"

