Expose type alignment on gdb.Type
[external/binutils.git] / gdb / testsuite / gdb.python / py-type.c
1 /* This testcase is part of GDB, the GNU debugger.
2
3    Copyright 2009-2018 Free Software Foundation, Inc.
4
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 3 of the License, or
8    (at your option) any later version.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17
18 struct s
19 {
20   int a;
21   int b;
22 };
23
24 struct SS
25 {
26   union { int x; char y; };
27   union { int a; char b; };
28 };
29
30 typedef struct s TS;
31 TS ts;
32
33 int aligncheck;
34
35 #ifdef __cplusplus
36 struct C
37 {
38   int c;
39   int d;
40
41   int
42   a_method (int x, char y)
43     {
44       return x + y;
45     }
46
47   int
48   a_const_method (int x, char y) const
49     {
50       return x + y;
51     }
52
53   static int
54   a_static_method (int x, char y)
55     {
56       return x + y;
57     }
58 };
59
60 struct D : C
61 {
62   int e;
63   int f;
64 };
65
66 template<typename T, int I, int C::*MP>
67 struct Temargs
68 {
69 };
70
71 Temargs<D, 23, &C::c> temvar;
72
73 #endif
74
75 enum E
76 { v1, v2, v3
77 };
78
79 struct s vec_data_1 = {1, 1};
80 struct s vec_data_2 = {1, 2};
81
82 static int
83 a_function (int x, char y)
84 {
85   return x + y;
86 }
87
88 int
89 main ()
90 {
91   int ar[2] = {1,2};
92   struct s st;
93   struct SS ss;
94 #ifdef __cplusplus
95   C c;
96   c.c = 1;
97   c.d = 2;
98   D d;
99   d.e = 3;
100   d.f = 4;
101
102   c.a_method (0, 1);
103   c.a_const_method (0, 1);
104   C::a_static_method (0, 1);
105 #endif
106   enum E e;
107
108   st.a = 3;
109   st.b = 5;
110
111   e = v2;
112
113   ss.x = 100;
114
115   a_function (0, 1);
116
117   return 0;      /* break to inspect struct and array.  */
118 }