| /* This testcase is part of GDB, the GNU debugger. |
| |
| Copyright 2014-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 <stdbool.h> |
| #include <iostream> |
| |
| #define SOME_MACRO 23 |
| #define ARG_MACRO(X, Y) ((X) + (Y) - 1) |
| |
| |
| enum enum_type { |
| ONE = 1, |
| TWO = 2 |
| }; |
| |
| typedef int v4 __attribute__ ((vector_size (16))); |
| |
| union union_type; |
| |
| struct struct_type { |
| char charfield; |
| unsigned char ucharfield; |
| short shortfield; |
| unsigned short ushortfield; |
| int intfield; |
| unsigned int uintfield; |
| unsigned int bitfield : 3; |
| long longfield; |
| unsigned long ulongfield; |
| enum enum_type enumfield; |
| float floatfield; |
| double doublefield; |
| const union union_type *ptrfield; |
| struct struct_type *selffield; |
| int arrayfield[5]; |
| _Complex double complexfield; |
| _Bool boolfield; |
| v4 vectorfield; |
| }; |
| |
| typedef int inttypedef; |
| |
| union union_type { |
| int intfield; |
| inttypedef typedeffield; |
| }; |
| |
| /* volatile provides some coverage of the conversion code. */ |
| volatile struct struct_type struct_object; |
| |
| union union_type union_object; |
| |
| |
| enum ulonger_enum_type { |
| REALLY_MINUS_1 = -1UL, |
| }; |
| |
| enum ulonger_enum_type ulonger; |
| |
| enum longer_enum_type { |
| MINUS_1 = -1, |
| FORCE_TO_LONG = 1L << ((8 * sizeof (long)) - 2) |
| }; |
| |
| enum longer_enum_type longer; |
| |
| int globalvar = 10; |
| |
| static void |
| func_static (int addend) |
| { |
| globalvar += addend; |
| } |
| |
| void |
| func_global (int subtrahend) |
| { |
| globalvar -= subtrahend; |
| } |
| |
| void |
| no_args_or_locals () |
| { |
| /* no_args_or_locals breakpoint */ |
| } |
| |
| int *intptr; |
| int globalshadow = 10; |
| static int staticshadow = 20; |
| int externed = 7; |
| |
| class Base |
| { |
| virtual int pure_virt () = 0; |
| public: |
| int return_value () {return a;} |
| private: |
| int a = 1; |
| int b = 2; |
| }; |
| |
| class Base2 |
| { |
| virtual int non_pure () {return 84;} |
| public: |
| int return_value () {return b;} |
| private: |
| int a = 3; |
| int b = 4; |
| }; |
| |
| class Base3 |
| { |
| public: |
| int return_value () {return b;} |
| private: |
| int b = 5; |
| }; |
| |
| |
| class Multiple : public Base, public Base2 |
| { |
| int pure_virt () |
| { |
| int a = Base::return_value (); |
| return a + 42; |
| } |
| }; |
| //struct foo { foo(); virtual ~foo(); }; struct bar : virtual foo { bar(); ~bar(); }; struct baz : bar {}; bar::bar() {} bar::~bar() {} bar t; baz u; |
| struct VirtualOnly |
| { |
| VirtualOnly(); |
| virtual ~VirtualOnly()=0; |
| }; |
| |
| VirtualOnly::VirtualOnly () |
| { |
| } |
| |
| VirtualOnly::~VirtualOnly () |
| { |
| } |
| |
| struct VirtualBase : virtual VirtualOnly |
| { |
| int z = 22; |
| VirtualBase (); |
| ~VirtualBase (); |
| }; |
| |
| struct VirtualBase2 : VirtualBase {}; |
| |
| VirtualBase::VirtualBase () |
| { |
| z = 24; |
| } |
| |
| VirtualBase::~VirtualBase () |
| { |
| z = 22; |
| } |
| |
| class Foo |
| { |
| int var; |
| static const int public_static_var = 12; |
| |
| private: |
| int private_var = 0; |
| int private_method (); |
| |
| public: |
| int public_var = 0; |
| int public_method (); |
| void set_private_var (int); |
| }; |
| |
| void Foo::set_private_var (int i) |
| { |
| private_var = i; |
| } |
| |
| int Foo::private_method () |
| { |
| return private_var; |
| } |
| |
| int Foo::public_method () |
| { |
| return public_var; |
| } |
| |
| int |
| main () |
| { |
| int localvar = 50; |
| int shadowed = 51; |
| int bound = 3; |
| int unresolved = 10; |
| int globalshadow = 100; |
| int staticshadow = 200; |
| int externed = 9; |
| int f = 0; |
| int var = 0; |
| Foo foovar; |
| Multiple *multivar = new Multiple; |
| VirtualBase vbase; |
| VirtualBase2 vbase2; |
| static int static_local = 77000; |
| |
| foovar.public_var = 42; |
| foovar.set_private_var (42); |
| multivar->Base2::return_value(); |
| { |
| int another_local = 7; |
| int shadowed = 52; |
| extern int unresolved; |
| extern int externed; |
| |
| int vla[bound]; |
| |
| func_static (0); /* break-here */ |
| no_args_or_locals (); |
| } |
| |
| return 0; |
| } |