# Copyright 2014-2017 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\\\}" \
         "print int_vla"
gdb_test "print unsigned_int_vla" " = \\\{0, 2, 4, 6, 8\\\}" \
         "print unsigned_int_vla"
gdb_test "print double_vla" " = \\\{0, 0.5, 1, 1.5, 2\\\}" \
         "print double_vla"
gdb_test "print float_vla" " = \\\{0, 0.5, 1, 1.5, 2\\\}" \
         "print float_vla"
gdb_test "print long_vla" " = \\\{0, 2, 4, 6, 8\\\}" \
         "print long_vla"
gdb_test "print unsigned_long_vla" " = \\\{0, 2, 4, 6, 8\\\}" \
         "print unsigned_long_vla"
gdb_test "print char_vla" " = \"AAAAA\"" \
         "print char_vla"
gdb_test "print short_vla" " = \\\{0, 2, 4, 6, 8\\\}" \
         "print short_vla"
gdb_test "print unsigned_short_vla" " = \\\{0, 2, 4, 6, 8\\\}" \
         "print unsigned_short_vla"
gdb_test "print unsigned_char_vla" " = \"AAAAA\"" \
         "print unsigned_char_vla"
gdb_test "print foo_vla" \
         "\\\{\\\{a = 0\\\}, \\\{a = 2\\\}, \\\{a = 4\\\}, \\\{a = 6\\\}, \\\{a = 8\\\}\\\}" \
         "print foo_vla"
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\\\}\\\}\\\}" \
         "print bar_vla"
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\\\]" "whatis int_vla"
gdb_test "whatis unsigned_int_vla" "type = unsigned int \\\[5\\\]" \
         "whatis unsigned_int_vla"
gdb_test "whatis double_vla" "type = double \\\[5\\\]" "whatis double_vla"
gdb_test "whatis float_vla" "type = float \\\[5\\\]" "whatis float_vla"
gdb_test "whatis long_vla" "type = long( int)? \\\[5\\\]" "whatis long_vla"
gdb_test "whatis unsigned_long_vla" \
         "type = (long unsigned int|unsigned long) \\\[5\\\]" \
         "whatis unsigned_long_vla"
gdb_test "whatis char_vla" "type = char \\\[5\\\]" "whatis char_vla"
gdb_test "whatis short_vla" "type = short( int)? \\\[5\\\]" \
         "whatis short_vla"
gdb_test "whatis unsigned_short_vla" \
         "type = (short unsigned int|unsigned short) \\\[5\\\]" \
         "whatis unsigned_short_vla"
gdb_test "whatis unsigned_char_vla" "type = unsigned char \\\[5\\\]" \
         "whatis unsigned_char_vla"
gdb_test "whatis foo_vla" "type = struct foo \\\[5\\\]" "whatis foo_vla"
gdb_test "whatis bar_vla" "type = BAR \\\[5\\\]" "whatis bar_vla"
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\\\]" "ptype int_vla"
gdb_test "ptype unsigned_int_vla" "type = unsigned int \\\[5\\\]" \
         "ptype unsigned_int_vla"
gdb_test "ptype double_vla" "type = double \\\[5\\\]" "ptype double_vla"
gdb_test "ptype float_vla" "type = float \\\[5\\\]" "ptype float_vla"
gdb_test "ptype long_vla" "type = long( int)? \\\[5\\\]" "ptype long_vla"
gdb_test "ptype unsigned_long_vla" "type = unsigned long \\\[5\\\]" \
         "ptype unsigned_long_vla"
gdb_test "ptype char_vla" "type = char \\\[5\\\]" "ptype char_vla"
gdb_test "ptype short_vla" "type = short( int)? \\\[5\\\]" \
         "ptype short_vla"
gdb_test "ptype unsigned_short_vla" "type = unsigned short \\\[5\\\]" \
         "ptype unsigned_short_vla"
gdb_test "ptype unsigned_char_vla" "type = unsigned char \\\[5\\\]" \
         "ptype unsigned_char_vla"
gdb_test "ptype foo_vla" "type = struct foo {\r\n\\s+int a;\r\n} \\\[5\\\]" \
         "ptype foo_vla"
gdb_test "ptype bar_vla" \
         "type = struct bar {\r\n\\s+int x;\r\n\\s+struct foo y;\r\n} \\\[5\\\]" \
         "ptype bar_vla"
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}" \
         "print sizeof (++int_vla\[0\])"
gdb_test "print int_vla\[0\]" " = 42" \
         "print int_vla\[0\] - sizeof no side effects"

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

gdb_test "whatis ++int_vla\[0\]" "type = int" "whatis ++int_vla\[0\]"
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"
