/* This testcase is part of GDB, the GNU debugger. Copyright 2019-2023 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 . */ #include typedef struct point { int x; int y; } point_t; typedef struct { point_t the_point; } struct_point_t; typedef union { int an_int; char a_char; } union_t; typedef struct { union_t the_union; } struct_union_t; typedef enum { ENUM_FOO, ENUM_BAR, } enum_t; typedef void (*function_t) (int); static void my_function(int n) { } #ifdef __cplusplus struct Base { Base (int a_) : a (a_) {} virtual int get_number () { return a; } int a; static int a_static_member; }; int Base::a_static_member = 2019; struct Deriv : Base { Deriv (int b_) : Base (42), b (b_) {} virtual int get_number () { return b; } int b; }; #endif int global_symbol = 42; int main () { point_t a_point_t = { 42, 12 }; point_t *a_point_t_pointer = &a_point_t; #ifdef __cplusplus point_t &a_point_t_ref = a_point_t; #endif struct point another_point = { 123, 456 }; struct_point_t a_struct_with_point = { a_point_t }; struct_union_t a_struct_with_union; /* Fill the union in an endianness-independent way. */ memset (&a_struct_with_union.the_union, 42, sizeof (a_struct_with_union.the_union)); enum_t an_enum = ENUM_BAR; const char *a_string = "hello world"; const char *a_binary_string = "hello\0world"; const char a_binary_string_array[] = "hello\0world"; const int letters_repeat = 10; char a_big_string[26 * letters_repeat + 1]; a_big_string[26 * letters_repeat] = '\0'; for (int i = 0; i < letters_repeat; i++) for (char c = 'A'; c <= 'Z'; c++) a_big_string[i * 26 + c - 'A'] = c; int an_array[] = { 2, 3, 5 }; int an_array_with_repetition[] = { 1, /* 1 time. */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 12 times. */ 5, 5, 5, /* 3 times */ }; int *a_symbol_pointer = &global_symbol; #ifdef __cplusplus Deriv a_deriv (123); Base &a_base_ref = a_deriv; #endif return 0; /* break here */ }