1// gdb_index_test.cc -- a test case for the --gdb-index option. 2 3// Copyright (C) 2012-2017 Free Software Foundation, Inc. 4// Written by Cary Coutant <ccoutant@google.com>. 5 6// This file is part of gold. 7 8// This program is free software; you can redistribute it and/or modify 9// it under the terms of the GNU General Public License as published by 10// the Free Software Foundation; either version 3 of the License, or 11// (at your option) any later version. 12 13// This program is distributed in the hope that it will be useful, 14// but WITHOUT ANY WARRANTY; without even the implied warranty of 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16// GNU General Public License for more details. 17 18// You should have received a copy of the GNU General Public License 19// along with this program; if not, write to the Free Software 20// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 21// MA 02110-1301, USA. 22 23// This source file defines a number of symbols of different forms 24// to exercise the DWARF scanner in gold. 25 26namespace 27{ 28int c1_count; 29int c2_count; 30}; 31 32namespace one 33{ 34 35enum G 36{ 37 G_A, 38 G_B, 39 G_C 40}; 41 42class c1 43{ 44 public: 45 static int count; 46 47 c1() 48 { ++c1_count; } 49 50 ~c1() 51 { 52 --c1_count; 53 } 54 55 enum E 56 { 57 E_A, 58 E_B, 59 E_C, 60 }; 61 62 int 63 val() 64 { return E_A; } 65}; 66 67c1 c1v; 68}; 69 70namespace two 71{ 72const int ci = 3; 73 74template <typename T> 75class c2 76{ 77 public: 78 c2(T t) 79 : t_(t) 80 { 81 ++c2_count; 82 } 83 84 ~c2() 85 { --c2_count; } 86 87 T 88 val() 89 { return this->t_; } 90 91 T t_; 92}; 93 94c2<int> c2v1(1); 95c2<double> c2v2(2.0); 96c2<int const*> c2v3(&ci); 97}; 98 99enum F 100{ 101 F_A, 102 F_B, 103 F_C 104}; 105 106template <class C> 107bool 108check(C* c) 109{ return c->val() == 0; } 110 111bool 112check_enum(int i) 113{ return i > 0; } 114 115struct anonymous_union_container { 116 union { 117 struct astruct { 118 int a; 119 }; 120 int b; 121 } u; 122}; 123 124anonymous_union_container anonymous_union_var; 125 126#ifdef __GNUC__ 127#define ALWAYS_INLINE __attribute__((always_inline)) 128#else 129#define ALWAYS_INLINE 130#endif 131 132static inline ALWAYS_INLINE int 133inline_func_1(int i) 134{ return i * 17; } 135 136int 137main() 138{ 139 F f = F_A; 140 one::G g = one::G_A; 141 check_enum(f); 142 check_enum(g); 143 check(&one::c1v); 144 check(&two::c2v1); 145 check(&two::c2v2); 146 check(&two::c2v3); 147 anonymous_union_var.u.b = inline_func_1(3) - 51; 148 return anonymous_union_var.u.b; 149} 150