1 /* This testcase is part of GDB, the GNU debugger.
3 Copyright 2008-2020 Free Software Foundation, Inc.
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */
45 /* If -1, don't pass length to gdb.lazy_string(). */
53 struct children_as_list {
69 SSS (int x, const S& r);
73 SSS::SSS (int x, const S& r) : a(x), b(r) { }
87 class Vbase1 : public virtual VirtualTest { };
88 class Vbase2 : public virtual VirtualTest { };
89 class Vbase3 : public virtual VirtualTest { };
91 class Derived : public Vbase1, public Vbase2, public Vbase3
108 Fake (const int name = 0):
115 struct to_string_returns_value_inner
120 struct to_string_returns_value_wrapper
122 struct to_string_returns_value_inner inner;
136 substruct_test (void)
138 struct outerstruct outer;
143 outer.s.a = 3; /* MI outer breakpoint here */
148 typedef struct string_repr
152 const char *contents;
156 /* This lets us avoid malloc. */
166 typedef struct justchildren nostring_type;
181 typedef struct container zzz_type;
184 make_string (const char *s)
187 result.whybother.contents = s;
192 make_container (const char *s)
196 result.name = make_string (s);
205 add_item (zzz_type *c, int val)
209 c->elements[c->len] = val;
214 set_item(zzz_type *c, int i, int val)
217 c->elements[i] = val;
220 void init_s(struct s *s, int a)
226 void init_ss(struct ss *s, int a, int b)
232 void do_nothing(void)
236 c = 23; /* Another MI breakpoint */
244 struct string_repr string_1 = { { "one" } };
245 struct string_repr string_2 = { { "two" } };
248 eval_func (int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8)
256 struct eval_type_s { int x; } eval1 = { 1 }, eval2 = { 2 }, eval3 = { 3 },
257 eval4 = { 4 }, eval5 = { 5 }, eval6 = { 6 },
258 eval7 = { 7 }, eval8 = { 8 }, eval9 = { 9 };
260 eval1.x++; /* eval-break */
266 zzz_type c = make_container ("bug_14741");
268 set_item(&c, 0, 42); /* breakpoint bug 14741 */
272 /* Some typedefs/variables for checking that GDB doesn't lose typedefs
273 when looking for a printer. */
274 typedef int int_type;
275 typedef int_type int_type2;
276 typedef int_type int_type3;
279 int_type an_int_type = 1;
280 int_type2 an_int_type2 = 2;
281 int_type3 an_int_type3 = 3;
288 struct arraystruct arraystruct;
289 string x = make_string ("this is x");
290 zzz_type c = make_container ("container");
291 zzz_type c2 = make_container ("container2");
292 const struct string_repr cstring = { { "const string" } };
293 /* Clearing by being `static' could invoke an other GDB C++ bug. */
294 struct nullstr nullstr;
295 nostring_type nstype, nstype2;
296 struct memory_error me;
298 struct lazystring estring, estring2, estring3;
299 struct hint_error hint_error;
300 struct children_as_list children_as_list;
301 struct to_string_returns_value_wrapper tsrvw = { { 1989 } };
303 nstype.elements = narray;
309 init_ss(ssa+0, 3, 4);
310 init_ss(ssa+1, 5, 6);
311 memset (&nullstr, 0, sizeof nullstr);
314 init_s (&arraystruct.x[0], 23);
315 init_s (&arraystruct.x[1], 24);
317 ns.null_str = "embedded\0null\0string";
320 /* Make a "corrupted" string. */
324 estring.lazy_str = "embedded x\201\202\203\204";
327 /* Incomplete UTF-8, but ok Latin-1. */
328 estring2.lazy_str = "embedded x\302";
331 estring3.lazy_str = NULL;
346 init_s(&cpssa[0].s, 12);
348 init_s(&cpssa[1].s, 14);
359 add_item (&c, 23); /* MI breakpoint here */
364 c.elements[0] = 1023;
365 c.elements[0] = 2323;
367 add_item (&c2, 2222);
368 add_item (&c2, 3333);
374 nstype.elements[0] = 7;
375 nstype.elements[1] = 42;
382 bug_14741(); /* break to inspect struct and union */