/* This testcase is part of GDB, the GNU debugger. Copyright 2017 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 /* 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 int 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; }; 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; return 0; }