1/* This testcase is part of GDB, the GNU debugger. 2 3 Copyright 2019-2023 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 18namespace NS1 { 19 20namespace NS2 { 21 22struct object 23{ 24 object () 25 { 26 } 27}; 28 29typedef object *object_p; 30 31template<typename T> 32struct Templ1 33{ 34 explicit Templ1 (object_p) 35 { 36 } 37 38 template<typename I> 39 static void 40 static_method (object_p) 41 { 42 } 43}; 44 45template<typename T, typename U> 46struct Templ2 47{ 48 explicit Templ2 (object_p) 49 { 50 } 51 52 template<typename I> 53 static void 54 static_method (object_p) 55 { 56 } 57}; 58 59template<typename T> using AliasTempl = Templ2<int, T>; 60 61typedef Templ1<int> int_Templ1_t; 62 63void 64object_p_func (object_p) 65{ 66} 67 68void 69int_Templ1_t_func (int_Templ1_t *) 70{ 71} 72 73} // namespace NS2 74 75} // namespace NS1 76 77/* These typedefs have the same name as some of the components within 78 NS1 that they alias to, on purpose, to try to confuse GDB and cause 79 recursion. */ 80using NS2 = int; 81using object = NS1::NS2::object; 82using Templ1 = NS1::NS2::Templ1<unsigned>; 83using Templ2 = NS1::NS2::Templ2<long, long>; 84using AliasTempl = NS1::NS2::AliasTempl<int>; 85 86NS2 ns2_int = 0; 87object obj; 88Templ1 templ1 (0); 89NS1::NS2::int_Templ1_t int_templ1 (0); 90AliasTempl alias (0); 91 92int 93main () 94{ 95 NS1::NS2::Templ1<int>::static_method<int> (0); 96 NS1::NS2::AliasTempl<int>::static_method<int> (0); 97 NS1::NS2::object_p_func (0); 98 NS1::NS2::int_Templ1_t_func (0); 99 100 return 0; 101} 102