]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/testsuite/gdb.compile/compile-cplus-member.cc
Update copyright year range in all GDB files.
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.compile / compile-cplus-member.cc
1 /* Copyright 2015-2019 Free Software Foundation, Inc.
2
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; either version 3 of the License, or
6 (at your option) any later version.
7
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
12
13 You should have received a copy of the GNU General Public License
14 along with this program. If not, see <http://www.gnu.org/licenses/>. */
15
16 class A;
17 static int get_values (const A& a);
18
19 enum myenum {E_A = 10, E_B, E_C, E_D, E_E};
20
21 namespace N {
22 typedef enum {NA = 20, NB, NC, ND} ANON_NE;
23 }
24
25 namespace {
26 typedef enum {AA = 40, AB, AC, AD} ANON_E;
27 }
28
29 ANON_E g_e = AC;
30
31 class A
32 {
33 public:
34 typedef int ATYPE;
35
36 A () : public_ (1), protected_ (N::NB), private_ (3) {}
37 ATYPE public_;
38 static const myenum s_public_;
39 friend ATYPE get_values (const A&);
40
41 protected:
42 N::ANON_NE protected_;
43 static N::ANON_NE s_protected_;
44
45 private:
46 ATYPE private_;
47 static myenum s_private_;
48 };
49
50 const myenum A::s_public_ = E_A;
51 N::ANON_NE A::s_protected_ = N::NA;
52 myenum A::s_private_ = E_C;
53
54 static A::ATYPE
55 get_values (const A& a)
56 {
57 A::ATYPE val;
58
59 val = a.public_ + a.private_; // 1 + 3
60 if (a.protected_ == N::NB) // + 21
61 val += 21;
62 if (a.s_public_ == E_A) // +10
63 val += 10;
64 if (a.s_protected_ == N::NA) // +20
65 val += 20;
66 if (a.s_private_ == E_C) // +30
67 val += 30;
68 if (g_e == AC) // +40
69 val += 40;
70 return val; // = 125
71 }
72
73 typedef int A::*PMI;
74
75 int
76 main ()
77 {
78 A a;
79 int var = 1234;
80 PMI pmi = &A::public_;
81
82 return a.*pmi + get_values (a); // break here
83 }