1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
# Copyright 2014-2015 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"
|