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

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\\\}\\\}\\\}"
gdb_test "print vla_struct_object" \
    "\\\{something = 5, vla_field = \\\{0, 2, 4, 6, 8\\\}\\\}"
gdb_test "print vla_union_object" \
    "\\\{vla_field = \\\{0, 2, 4, 6, 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\\\]"
gdb_test "whatis vla_struct_object" "type = struct vla_struct"
gdb_test "whatis vla_union_object" "type = union vla_union"

# 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\\\]"
gdb_test "ptype vla_struct_object" \
    "type = struct vla_struct {\r\n\\s+int something;\r\n\\s+int vla_field\\\[5\\\];\r\n}"
gdb_test "ptype vla_union_object" \
    "type = union vla_union {\r\n\\s+int vla_field\\\[5\\\];\r\n}"

# 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"
gdb_test "print vla_struct_object_size == sizeof(vla_struct_object)" \
    " = 1" "size of vla_struct_object"
gdb_test "print vla_union_object_size == sizeof(vla_union_object)" \
    " = 1" "size of vla_union_object"

# 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"

# Fails due to incorrect debugging information generated by GCC.
setup_xfail "*-*-*"
gdb_test \
    "print inner_vla_struct_object_size == sizeof(inner_vla_struct_object)" \
    " = 1" "size of inner_vla_struct_object"
