| /* This testcase is part of GDB, the GNU debugger. |
| |
| Copyright 2017-2021 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/>. */ |
| |
| #include <stdint.h> |
| |
| /* A struct with many types of fields, in order to test 'ptype |
| /o'. */ |
| |
| struct abc |
| { |
| /* Virtual destructor. */ |
| virtual ~abc () |
| {} |
| |
| /* 8-byte address. Because of the virtual destructor above, this |
| field's offset will be 8. */ |
| void *field1; |
| |
| /* No hole here. */ |
| |
| /* 4-byte int bitfield of 1-bit. */ |
| unsigned int field2 : 1; |
| |
| /* 31-bit hole here. */ |
| |
| /* 4-byte int. */ |
| signed int field3; |
| |
| /* No hole here. */ |
| |
| /* 1-byte char. */ |
| signed char field4; |
| |
| /* 7-byte hole here. */ |
| |
| /* 8-byte int. */ |
| uint64_t field5; |
| |
| /* We just print the offset and size of a union, ignoring its |
| fields. */ |
| union |
| { |
| /* 8-byte address. */ |
| void *field6; |
| |
| /* 4-byte int. */ |
| signed int field7; |
| } field8; |
| |
| /* Empty constructor. */ |
| abc () |
| {} |
| |
| /* Typedef defined in-struct. */ |
| typedef short my_int_type; |
| |
| my_int_type field9; |
| }; |
| |
| /* This struct will be nested inside 'struct xyz'. */ |
| |
| struct tuv |
| { |
| signed int a1; |
| |
| signed char *a2; |
| |
| signed int a3; |
| }; |
| |
| /* This struct will be nested inside 'struct pqr'. */ |
| |
| struct xyz |
| { |
| signed int f1; |
| |
| signed char f2; |
| |
| void *f3; |
| |
| struct tuv f4; |
| }; |
| |
| /* A struct with a nested struct. */ |
| |
| struct pqr |
| { |
| signed int ff1; |
| |
| struct xyz ff2; |
| |
| signed char ff3; |
| }; |
| |
| /* A union with two nested structs. */ |
| |
| union qwe |
| { |
| struct tuv fff1; |
| |
| struct xyz fff2; |
| }; |
| |
| /* A struct with an union. */ |
| |
| struct poi |
| { |
| signed int f1; |
| |
| union qwe f2; |
| |
| uint16_t f3; |
| |
| struct pqr f4; |
| }; |
| |
| /* A struct with bitfields. */ |
| |
| struct tyu |
| { |
| signed int a1 : 1; |
| |
| signed int a2 : 3; |
| |
| signed int a3 : 23; |
| |
| signed char a4 : 2; |
| |
| int64_t a5; |
| |
| signed int a6 : 5; |
| |
| int64_t a7 : 3; |
| }; |
| |
| /* A struct with structs and unions. */ |
| |
| struct asd |
| { |
| struct jkl |
| { |
| signed char *f1; |
| union |
| { |
| void *ff1; |
| } f2; |
| union |
| { |
| signed char *ff2; |
| } f3; |
| int f4 : 5; |
| unsigned int f5 : 1; |
| short f6; |
| } f7; |
| unsigned long f8; |
| signed char *f9; |
| int f10 : 4; |
| unsigned int f11 : 1; |
| unsigned int f12 : 1; |
| unsigned int f13 : 1; |
| unsigned int f14 : 1; |
| void *f15; |
| void *f16; |
| }; |
| |
| /* See PR c++/23373. */ |
| |
| struct static_member |
| { |
| static static_member Empty; |
| int abc; |
| }; |
| |
| /* Work around PR gcc/101452. */ |
| static_member static_member::Empty; |
| |
| struct empty_member |
| { |
| struct { } empty; |
| int an_int; |
| }; |
| |
| int |
| main (int argc, char *argv[]) |
| { |
| struct abc foo; |
| struct pqr bar; |
| union qwe c; |
| struct poi d; |
| struct tyu e; |
| struct asd f; |
| uint8_t i; |
| static_member stmember; |
| empty_member emember; |
| |
| return 0; |
| } |