diff options
Diffstat (limited to 'gdb/testsuite/gdb.base/ptype-offsets.cc')
-rw-r--r-- | gdb/testsuite/gdb.base/ptype-offsets.cc | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/ptype-offsets.cc b/gdb/testsuite/gdb.base/ptype-offsets.cc new file mode 100644 index 0000000..8673520 --- /dev/null +++ b/gdb/testsuite/gdb.base/ptype-offsets.cc @@ -0,0 +1,193 @@ +/* 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 <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 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; +} |