summaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.base/vla-datatypes.exp
blob: 5a783ab4e329e7365535f13c4973b5a67bf5fa58 (plain)
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"