194 lines
3.0 KiB
C++
194 lines
3.0 KiB
C++
/* This testcase is part of GDB, the GNU debugger.
|
|
|
|
Copyright 2017-2018 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;
|
|
}
|