# Copyright 2014-2016 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 ${testfile}.exp ${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"
