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

standard_testfile

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

if ![runto_main] {
    return -1
}

gdb_breakpoint [gdb_get_line_number "vlas_filled"]
gdb_continue_to_breakpoint "vlas_filled"

# Check the values of VLA's.
gdb_test "print int_vla" " = \\\{0, 2, 4, 6, 8\\\}"
gdb_test "print unsigned_int_vla" " = \\\{0, 2, 4, 6, 8\\\}"
gdb_test "print double_vla" " = \\\{0, 0.5, 1, 1.5, 2\\\}"
gdb_test "print float_vla" " = \\\{0, 0.5, 1, 1.5, 2\\\}"
gdb_test "print long_vla" " = \\\{0, 2, 4, 6, 8\\\}"
gdb_test "print unsigned_long_vla" " = \\\{0, 2, 4, 6, 8\\\}"
gdb_test "print char_vla" " = \"AAAAA\""
gdb_test "print short_vla" " = \\\{0, 2, 4, 6, 8\\\}"
gdb_test "print unsigned_short_vla" " = \\\{0, 2, 4, 6, 8\\\}"
gdb_test "print unsigned_char_vla" " = \"AAAAA\""
gdb_test "print foo_vla" \
         "\\\{\\\{a = 0\\\}, \\\{a = 2\\\}, \\\{a = 4\\\}, \\\{a = 6\\\}, \\\{a = 8\\\}\\\}"
gdb_test "print bar_vla" \
         "\\\{\\\{x = 0, y = \\\{a = 0\\\}\\\}, \\\{x = 2, y = \\\{a = 2\\\}\\\}, \\\{x = 4, y = \\\{a = 4\\\}\\\}, \\\{x = 6, y = \\\{a = 6\\\}\\\}, \\\{x = 8, y = \\\{a = 8\\\}\\\}\\\}"

# Check whatis of VLA's.
gdb_test "whatis int_vla" "type = int \\\[5\\\]"
gdb_test "whatis unsigned_int_vla" "type = unsigned int \\\[5\\\]"
gdb_test "whatis double_vla" "type = double \\\[5\\\]"
gdb_test "whatis float_vla" "type = float \\\[5\\\]"
gdb_test "whatis long_vla" "type = long( int)? \\\[5\\\]"
gdb_test "whatis unsigned_long_vla" \
         "type = (long unsigned int|unsigned long) \\\[5\\\]"
gdb_test "whatis char_vla" "type = char \\\[5\\\]"
gdb_test "whatis short_vla" "type = short( int)? \\\[5\\\]"
gdb_test "whatis unsigned_short_vla" \
         "type = (short unsigned int|unsigned short) \\\[5\\\]"
gdb_test "whatis unsigned_char_vla" "type = unsigned char \\\[5\\\]"
gdb_test "whatis foo_vla" "type = struct foo \\\[5\\\]"
gdb_test "whatis bar_vla" "type = BAR \\\[5\\\]"

# Check ptype of VLA's.
gdb_test "ptype int_vla" "type = int \\\[5\\\]"
gdb_test "ptype unsigned_int_vla" "type = unsigned int \\\[5\\\]"
gdb_test "ptype double_vla" "type = double \\\[5\\\]"
gdb_test "ptype float_vla" "type = float \\\[5\\\]"
gdb_test "ptype long_vla" "type = long( int)? \\\[5\\\]"
gdb_test "ptype unsigned_long_vla" "type = unsigned long \\\[5\\\]"
gdb_test "ptype char_vla" "type = char \\\[5\\\]"
gdb_test "ptype short_vla" "type = short( int)? \\\[5\\\]"
gdb_test "ptype unsigned_short_vla" "type = unsigned short \\\[5\\\]"
gdb_test "ptype unsigned_char_vla" "type = unsigned char \\\[5\\\]"
gdb_test "ptype foo_vla" "type = struct foo {\r\n\\s+int a;\r\n} \\\[5\\\]"
gdb_test "ptype bar_vla" \
         "type = struct bar {\r\n\\s+int x;\r\n\\s+struct foo y;\r\n} \\\[5\\\]"

# Check the size of the VLA's.
gdb_breakpoint [gdb_get_line_number "break_end_of_vla_factory"]
gdb_continue_to_breakpoint "break_end_of_vla_factory"
gdb_test "print int_size == sizeof(int_vla)" " = 1" "size of int_vla"
gdb_test "print uint_size == sizeof(unsigned_int_vla)" " = 1" \
         "size of unsigned_int_vla"
gdb_test "print double_size == sizeof(double_vla)" " = 1" \
         "size of double_vla"
gdb_test "print float_size == sizeof(float_vla)" " = 1" \
         "size of float_vla"
gdb_test "print long_size == sizeof(long_vla)" " = 1" \
         "size of long_vla"
gdb_test "print char_size == sizeof(char_vla)" " = 1" \
         "size of char_vla"
gdb_test "print short_size == sizeof(short_vla)" " = 1" \
         "size of short_vla"
gdb_test "print ushort_size == sizeof(unsigned_short_vla)" " = 1" \
         "size of unsigned_short_vla"
gdb_test "print uchar_size == sizeof(unsigned_char_vla)" " = 1" \
         "size of unsigned_char_vla"
gdb_test "print foo_size == sizeof(foo_vla)" " = 1" "size of foo_vla"
gdb_test "print bar_size == sizeof(bar_vla)" " = 1" "size of bar_vla"

# Check side effects for sizeof argument.
set sizeof_int [get_sizeof "int" 4]
gdb_test_no_output  "set variable int_vla\[0\] = 42" \
                    "set variable int_vla\[0\] = 42"

gdb_test "print sizeof (++int_vla\[0\])" " = ${sizeof_int}"
gdb_test "print int_vla\[0\]" " = 42" \
         "print int_vla\[0\] - sizeof no side effects"

gdb_test "ptype ++int_vla\[0\]" "type = int"
gdb_test "print int_vla\[0\]" " = 42" \
         "print int_vla\[0\] - ptype no side effects"

gdb_test "whatis ++int_vla\[0\]" "type = int"
gdb_test "print int_vla\[0\]" " = 42" \
         "print int_vla\[0\] - whatis no side effects"
