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

# Test printing and subscripting flexible array members.

standard_testfile

if { [prepare_for_testing "failed to prepare" \
	${testfile} ${srcfile}] } {
    return
}

if { ![runto break_here] } {
    untested "could not run to break_here"
    return
}

# The various cases are:
#
#  - ns: flexible array member with no size
#  - zs: flexible array member with size 0 (GNU C extension that predates the
#    standardization of the feature, but widely supported)
#  - zso: zero-size only, a corner case where the array is the sole member of
#    the structure

# Print the whole structure.

gdb_test "print *ns" " = {n = 3, items = $hex}"
gdb_test "print *zs" " = {n = 3, items = $hex}"
gdb_test "print *zso" " = {items = $hex}"

# Print all items.

gdb_test "print ns->items\[0\]" " = 101"
gdb_test "print ns->items\[1\]" " = 102"
gdb_test "print ns->items\[2\]" " = 103"

gdb_test "print zs->items\[0\]" " = 201"
gdb_test "print zs->items\[1\]" " = 202"
gdb_test "print zs->items\[2\]" " = 203"

gdb_test "print zso->items\[0\]" " = 301"
gdb_test "print zso->items\[1\]" " = 302"
gdb_test "print zso->items\[2\]" " = 303"

# Check taking the address of array elements (how PR 28675 was originally
# reported).

gdb_test "print ns->items == &ns->items\[0\]" " = 1"
gdb_test "print ns->items + 1 == &ns->items\[1\]" " = 1"
gdb_test "print zs->items == &zs->items\[0\]" " = 1"
gdb_test "print zs->items + 1 == &zs->items\[1\]" " = 1"
gdb_test "print zso->items == &zso->items\[0\]" " = 1"
gdb_test "print zso->items + 1 == &zso->items\[1\]" " = 1"
