1 1.1 christos /* This testcase is part of GDB, the GNU debugger. 2 1.1 christos 3 1.11 christos Copyright 1993-2024 Free Software Foundation, Inc. 4 1.1 christos 5 1.1 christos This program is free software; you can redistribute it and/or modify 6 1.1 christos it under the terms of the GNU General Public License as published by 7 1.1 christos the Free Software Foundation; either version 3 of the License, or 8 1.1 christos (at your option) any later version. 9 1.1 christos 10 1.1 christos This program is distributed in the hope that it will be useful, 11 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of 12 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 1.1 christos GNU General Public License for more details. 14 1.1 christos 15 1.1 christos You should have received a copy of the GNU General Public License 16 1.1 christos along with this program. If not, see <http://www.gnu.org/licenses/>. */ 17 1.1 christos 18 1.1 christos // Test various -*- C++ -*- things. 19 1.1 christos 20 1.1 christos // ====================== basic C++ types ======================= 21 1.1 christos bool v_bool; 22 1.1 christos bool v_bool_array[2]; 23 1.1 christos 24 1.1 christos typedef struct fleep fleep; 25 1.1 christos struct fleep { int a; } s; 26 1.1 christos 27 1.1 christos // ====================== simple class structures ======================= 28 1.1 christos 29 1.1 christos struct default_public_struct { 30 1.1 christos // defaults to public: 31 1.1 christos int a; 32 1.1 christos int b; 33 1.1 christos }; 34 1.1 christos 35 1.1 christos struct explicit_public_struct { 36 1.1 christos public: 37 1.1 christos int a; 38 1.1 christos int b; 39 1.1 christos }; 40 1.1 christos 41 1.1 christos struct protected_struct { 42 1.1 christos protected: 43 1.1 christos int a; 44 1.1 christos int b; 45 1.1 christos }; 46 1.1 christos 47 1.1 christos struct private_struct { 48 1.1 christos private: 49 1.1 christos int a; 50 1.1 christos int b; 51 1.1 christos }; 52 1.1 christos 53 1.1 christos struct mixed_protection_struct { 54 1.1 christos public: 55 1.1 christos int a; 56 1.1 christos int b; 57 1.1 christos private: 58 1.1 christos int c; 59 1.1 christos int d; 60 1.1 christos protected: 61 1.1 christos int e; 62 1.1 christos int f; 63 1.1 christos public: 64 1.1 christos int g; 65 1.1 christos private: 66 1.1 christos int h; 67 1.1 christos protected: 68 1.1 christos int i; 69 1.1 christos }; 70 1.1 christos 71 1.1 christos class public_class { 72 1.1 christos public: 73 1.1 christos int a; 74 1.1 christos int b; 75 1.1 christos }; 76 1.1 christos 77 1.1 christos class protected_class { 78 1.1 christos protected: 79 1.1 christos int a; 80 1.1 christos int b; 81 1.1 christos }; 82 1.1 christos 83 1.1 christos class default_private_class { 84 1.1 christos // defaults to private: 85 1.1 christos int a; 86 1.1 christos int b; 87 1.1 christos }; 88 1.1 christos 89 1.1 christos class explicit_private_class { 90 1.1 christos private: 91 1.1 christos int a; 92 1.1 christos int b; 93 1.1 christos }; 94 1.1 christos 95 1.1 christos class mixed_protection_class { 96 1.1 christos public: 97 1.1 christos int a; 98 1.1 christos int b; 99 1.1 christos private: 100 1.1 christos int c; 101 1.1 christos int d; 102 1.1 christos protected: 103 1.1 christos int e; 104 1.1 christos int f; 105 1.1 christos public: 106 1.1 christos int g; 107 1.1 christos private: 108 1.1 christos int h; 109 1.1 christos protected: 110 1.1 christos int i; 111 1.1 christos }; 112 1.1 christos 113 1.1 christos class const_vol_method_class { 114 1.1 christos public: 115 1.1 christos int a; 116 1.1 christos int b; 117 1.1 christos int foo (int &) const; 118 1.1 christos int bar (int &) volatile; 119 1.1 christos int baz (int &) const volatile; 120 1.1 christos }; 121 1.1 christos 122 1.1 christos int const_vol_method_class::foo (int & ir) const 123 1.1 christos { 124 1.1 christos return ir + 3; 125 1.1 christos } 126 1.1 christos int const_vol_method_class::bar (int & ir) volatile 127 1.1 christos { 128 1.1 christos return ir + 4; 129 1.1 christos } 130 1.1 christos int const_vol_method_class::baz (int & ir) const volatile 131 1.1 christos { 132 1.1 christos return ir + 5; 133 1.1 christos } 134 1.1 christos 135 1.1 christos // ========================= simple inheritance ========================== 136 1.1 christos 137 1.1 christos class A { 138 1.1 christos public: 139 1.1 christos int a; 140 1.1 christos int x; 141 1.1 christos }; 142 1.1 christos 143 1.1 christos A g_A; 144 1.1 christos 145 1.1 christos class B : public A { 146 1.1 christos public: 147 1.1 christos int b; 148 1.1 christos int x; 149 1.1 christos }; 150 1.1 christos 151 1.1 christos B g_B; 152 1.1 christos 153 1.1 christos class C : public A { 154 1.1 christos public: 155 1.1 christos int c; 156 1.1 christos int x; 157 1.1 christos }; 158 1.1 christos 159 1.1 christos C g_C; 160 1.1 christos 161 1.1 christos class D : public B, public C { 162 1.1 christos public: 163 1.1 christos int d; 164 1.1 christos int x; 165 1.1 christos }; 166 1.1 christos 167 1.1 christos D g_D; 168 1.1 christos 169 1.1 christos class E : public D { 170 1.1 christos public: 171 1.1 christos int e; 172 1.1 christos int x; 173 1.1 christos }; 174 1.1 christos 175 1.1 christos E g_E; 176 1.1 christos 177 1.1 christos class class_with_anon_union 178 1.1 christos { 179 1.1 christos public: 180 1.1 christos int one; 181 1.1 christos union 182 1.1 christos { 183 1.1 christos int a; 184 1.1 christos long b; 185 1.1 christos }; 186 1.1 christos }; 187 1.1 christos 188 1.1 christos class_with_anon_union g_anon_union; 189 1.1 christos 190 1.1 christos void inheritance2 (void) 191 1.1 christos { 192 1.1 christos } 193 1.1 christos 194 1.1 christos void inheritance1 (void) 195 1.1 christos { 196 1.1 christos int ival; 197 1.1 christos int *intp; 198 1.1 christos 199 1.1 christos // {A::a, A::x} 200 1.1 christos 201 1.1 christos g_A.A::a = 1; 202 1.1 christos g_A.A::x = 2; 203 1.1 christos 204 1.1 christos // {{A::a,A::x},B::b,B::x} 205 1.1 christos 206 1.1 christos g_B.A::a = 3; 207 1.1 christos g_B.A::x = 4; 208 1.1 christos g_B.B::b = 5; 209 1.1 christos g_B.B::x = 6; 210 1.1 christos 211 1.1 christos // {{A::a,A::x},C::c,C::x} 212 1.1 christos 213 1.1 christos g_C.A::a = 7; 214 1.1 christos g_C.A::x = 8; 215 1.1 christos g_C.C::c = 9; 216 1.1 christos g_C.C::x = 10; 217 1.1 christos 218 1.1 christos // {{{A::a,A::x},B::b,B::x},{{A::a,A::x},C::c,C::x},D::d,D::x} 219 1.1 christos 220 1.1 christos // The following initialization code is non-portable, but allows us 221 1.1 christos // to initialize all members of g_D until we can fill in the missing 222 1.1 christos // initialization code with legal C++ code. 223 1.1 christos 224 1.1 christos for (intp = (int *) &g_D, ival = 11; 225 1.1 christos intp < ((int *) &g_D + sizeof (g_D) / sizeof (int)); 226 1.1 christos intp++, ival++) 227 1.1 christos { 228 1.1 christos *intp = ival; 229 1.1 christos } 230 1.1 christos 231 1.1 christos // Overlay the nonportable initialization with legal initialization. 232 1.1 christos 233 1.1 christos // ????? = 11; (g_D.A::a = 11; is ambiguous) 234 1.1 christos // ????? = 12; (g_D.A::x = 12; is ambiguous) 235 1.1 christos /* djb 6-3-2000 236 1.1 christos 237 1.1 christos This should take care of it. Rather than try to initialize using an ambiguous 238 1.1 christos construct, use 2 unambiguous ones for each. Since the ambiguous a/x member is 239 1.1 christos coming from C, and B, initialize D's C::a, and B::a, and D's C::x and B::x. 240 1.1 christos */ 241 1.1 christos g_D.C::a = 15; 242 1.1 christos g_D.C::x = 12; 243 1.1 christos g_D.B::a = 11; 244 1.1 christos g_D.B::x = 12; 245 1.1 christos g_D.B::b = 13; 246 1.1 christos g_D.B::x = 14; 247 1.1 christos // ????? = 15; 248 1.1 christos // ????? = 16; 249 1.1 christos g_D.C::c = 17; 250 1.1 christos g_D.C::x = 18; 251 1.1 christos g_D.D::d = 19; 252 1.1 christos g_D.D::x = 20; 253 1.1 christos 254 1.1 christos 255 1.1 christos // {{{{A::a,A::x},B::b,B::x},{{A::a,A::x},C::c,C::x},D::d,D::x}},E::e,E::x} 256 1.1 christos 257 1.1 christos // The following initialization code is non-portable, but allows us 258 1.1 christos // to initialize all members of g_D until we can fill in the missing 259 1.1 christos // initialization code with legal C++ code. 260 1.1 christos 261 1.1 christos for (intp = (int *) &g_E, ival = 21; 262 1.1 christos intp < ((int *) &g_E + sizeof (g_E) / sizeof (int)); 263 1.1 christos intp++, ival++) 264 1.1 christos { 265 1.1 christos *intp = ival; 266 1.1 christos } 267 1.1 christos 268 1.1 christos // Overlay the nonportable initialization with legal initialization. 269 1.1 christos 270 1.1 christos // ????? = 21; (g_E.A::a = 21; is ambiguous) 271 1.1 christos // ????? = 22; (g_E.A::x = 22; is ambiguous) 272 1.1 christos g_E.B::b = 23; 273 1.1 christos g_E.B::x = 24; 274 1.1 christos // ????? = 25; 275 1.1 christos // ????? = 26; 276 1.1 christos g_E.C::c = 27; 277 1.1 christos g_E.C::x = 28; 278 1.1 christos g_E.D::d = 29; 279 1.1 christos g_E.D::x = 30; 280 1.1 christos g_E.E::e = 31; 281 1.1 christos g_E.E::x = 32; 282 1.1 christos 283 1.1 christos g_anon_union.one = 1; 284 1.1 christos g_anon_union.a = 2; 285 1.1 christos 286 1.1 christos inheritance2 (); 287 1.1 christos } 288 1.1 christos 289 1.1 christos // ======================== static member functions ===================== 290 1.1 christos 291 1.1 christos class Static { 292 1.1 christos public: 293 1.1 christos static void ii(int, int); 294 1.1 christos }; 295 1.1 christos void Static::ii (int, int) { } 296 1.1 christos 297 1.1 christos // ======================== virtual base classes========================= 298 1.1 christos 299 1.1 christos class vA { 300 1.1 christos public: 301 1.1 christos int va; 302 1.1 christos int vx; 303 1.1 christos }; 304 1.1 christos 305 1.1 christos vA g_vA; 306 1.1 christos 307 1.1 christos class vB : public virtual vA { 308 1.1 christos public: 309 1.1 christos int vb; 310 1.1 christos int vx; 311 1.1 christos }; 312 1.1 christos 313 1.1 christos vB g_vB; 314 1.1 christos 315 1.1 christos class vC : public virtual vA { 316 1.1 christos public: 317 1.1 christos int vc; 318 1.1 christos int vx; 319 1.1 christos }; 320 1.1 christos 321 1.1 christos vC g_vC; 322 1.1 christos 323 1.1 christos class vD : public virtual vB, public virtual vC { 324 1.1 christos public: 325 1.1 christos int vd; 326 1.1 christos int vx; 327 1.1 christos }; 328 1.1 christos 329 1.1 christos vD g_vD; 330 1.1 christos 331 1.1 christos class vE : public virtual vD { 332 1.1 christos public: 333 1.1 christos int ve; 334 1.1 christos int vx; 335 1.1 christos }; 336 1.1 christos 337 1.1 christos vE g_vE; 338 1.1 christos 339 1.1 christos void inheritance4 (void) 340 1.1 christos { 341 1.1 christos } 342 1.1 christos 343 1.1 christos void inheritance3 (void) 344 1.1 christos { 345 1.1 christos int ival; 346 1.1 christos int *intp; 347 1.1 christos 348 1.1 christos // {vA::va, vA::vx} 349 1.1 christos 350 1.1 christos g_vA.vA::va = 1; 351 1.1 christos g_vA.vA::vx = 2; 352 1.1 christos 353 1.1 christos // {{vA::va, vA::vx}, vB::vb, vB::vx} 354 1.1 christos 355 1.1 christos g_vB.vA::va = 3; 356 1.1 christos g_vB.vA::vx = 4; 357 1.1 christos g_vB.vB::vb = 5; 358 1.1 christos g_vB.vB::vx = 6; 359 1.1 christos 360 1.1 christos // {{vA::va, vA::vx}, vC::vc, vC::vx} 361 1.1 christos 362 1.1 christos g_vC.vA::va = 7; 363 1.1 christos g_vC.vA::vx = 8; 364 1.1 christos g_vC.vC::vc = 9; 365 1.1 christos g_vC.vC::vx = 10; 366 1.1 christos 367 1.1 christos // {{{{vA::va, vA::vx}, vB::vb, vB::vx}, vC::vc, vC::vx}, vD::vd,vD::vx} 368 1.1 christos 369 1.1 christos g_vD.vA::va = 11; 370 1.1 christos g_vD.vA::vx = 12; 371 1.1 christos g_vD.vB::vb = 13; 372 1.1 christos g_vD.vB::vx = 14; 373 1.1 christos g_vD.vC::vc = 15; 374 1.1 christos g_vD.vC::vx = 16; 375 1.1 christos g_vD.vD::vd = 17; 376 1.1 christos g_vD.vD::vx = 18; 377 1.1 christos 378 1.1 christos 379 1.1 christos // {{{{{vA::va,vA::vx},vB::vb,vB::vx},vC::vc,vC::vx},vD::vd,vD::vx},vE::ve,vE::vx} 380 1.1 christos 381 1.1 christos g_vD.vA::va = 19; 382 1.1 christos g_vD.vA::vx = 20; 383 1.1 christos g_vD.vB::vb = 21; 384 1.1 christos g_vD.vB::vx = 22; 385 1.1 christos g_vD.vC::vc = 23; 386 1.1 christos g_vD.vC::vx = 24; 387 1.1 christos g_vD.vD::vd = 25; 388 1.1 christos g_vD.vD::vx = 26; 389 1.1 christos g_vE.vE::ve = 27; 390 1.1 christos g_vE.vE::vx = 28; 391 1.1 christos 392 1.1 christos inheritance4 (); 393 1.1 christos } 394 1.1 christos 395 1.1 christos // ====================================================================== 396 1.1 christos 397 1.1 christos class Base1 { 398 1.1 christos public: 399 1.1 christos int x; 400 1.1 christos Base1(int i) { x = i; } 401 1.1 christos ~Base1 () { } 402 1.1 christos }; 403 1.1 christos 404 1.1 christos typedef Base1 base1; 405 1.1 christos 406 1.1 christos class Foo 407 1.1 christos { 408 1.1 christos public: 409 1.1 christos int x; 410 1.1 christos int y; 411 1.1 christos static int st; 412 1.1 christos Foo (int i, int j) { x = i; y = j; } 413 1.1 christos int operator! (); 414 1.1 christos operator int (); 415 1.1 christos int times (int y); 416 1.1 christos }; 417 1.1 christos 418 1.1 christos typedef Foo ByAnyOtherName; 419 1.1 christos 420 1.1 christos class Bar : public Base1, public Foo { 421 1.1 christos public: 422 1.1 christos int z; 423 1.1 christos Bar (int i, int j, int k) : Base1 (10*k), Foo (i, j) { z = k; } 424 1.1 christos }; 425 1.1 christos 426 1.1 christos int Foo::operator! () { return !x; } 427 1.1 christos 428 1.1 christos int Foo::times (int y) { return x * y; } 429 1.1 christos 430 1.1 christos int Foo::st = 100; 431 1.1 christos 432 1.1 christos Foo::operator int() { return x; } 433 1.1 christos 434 1.1 christos ByAnyOtherName foo(10, 11); 435 1.1 christos Bar bar(20, 21, 22); 436 1.1 christos 437 1.5 christos /* Use a typedef for the baseclass to exercise gnu-v3-abi.c:gnuv3_dynamic_class 438 1.5 christos recursion. It's important that the class itself have no name to make sure 439 1.5 christos the typedef makes it through to the recursive call. */ 440 1.5 christos typedef class { 441 1.5 christos public: 442 1.5 christos int x; 443 1.5 christos virtual int get_x () { return x; } 444 1.5 christos } DynamicBase2; 445 1.5 christos 446 1.5 christos class DynamicBar : public DynamicBase2 447 1.5 christos { 448 1.5 christos public: 449 1.5 christos DynamicBar (int i, int j) { x = i; y = j; } 450 1.5 christos int y; 451 1.5 christos }; 452 1.5 christos 453 1.5 christos DynamicBar dynbar (23, 24); 454 1.5 christos 455 1.1 christos class ClassWithEnum { 456 1.1 christos public: 457 1.1 christos enum PrivEnum { red, green, blue, yellow = 42 }; 458 1.1 christos PrivEnum priv_enum; 459 1.1 christos int x; 460 1.1 christos }; 461 1.1 christos 462 1.1 christos void enums2 (void) 463 1.1 christos { 464 1.1 christos } 465 1.1 christos 466 1.1 christos /* classes.exp relies on statement order in this function for testing 467 1.1 christos enumeration fields. */ 468 1.1 christos 469 1.1 christos void enums1 () 470 1.1 christos { 471 1.1 christos ClassWithEnum obj_with_enum; 472 1.1 christos obj_with_enum.priv_enum = ClassWithEnum::red; 473 1.1 christos obj_with_enum.x = 0; 474 1.1 christos enums2 (); 475 1.1 christos obj_with_enum.priv_enum = ClassWithEnum::green; 476 1.1 christos obj_with_enum.x = 1; 477 1.1 christos } 478 1.1 christos 479 1.1 christos class ClassParam { 480 1.1 christos public: 481 1.1 christos int Aptr_a (A *a) { return a->a; } 482 1.1 christos int Aptr_x (A *a) { return a->x; } 483 1.1 christos int Aref_a (A &a) { return a.a; } 484 1.1 christos int Aref_x (A &a) { return a.x; } 485 1.1 christos int Aval_a (A a) { return a.a; } 486 1.1 christos int Aval_x (A a) { return a.x; } 487 1.1 christos }; 488 1.1 christos 489 1.1 christos ClassParam class_param; 490 1.1 christos 491 1.1 christos class Contains_static_instance 492 1.1 christos { 493 1.1 christos public: 494 1.1 christos int x; 495 1.1 christos int y; 496 1.1 christos Contains_static_instance (int i, int j) { x = i; y = j; } 497 1.1 christos static Contains_static_instance null; 498 1.1 christos }; 499 1.1 christos 500 1.1 christos Contains_static_instance Contains_static_instance::null(0,0); 501 1.1 christos Contains_static_instance csi(10,20); 502 1.1 christos 503 1.1 christos class Contains_nested_static_instance 504 1.1 christos { 505 1.1 christos public: 506 1.1 christos class Nested 507 1.1 christos { 508 1.1 christos public: 509 1.1 christos Nested(int i) : z(i) {} 510 1.1 christos int z; 511 1.1 christos static Contains_nested_static_instance xx; 512 1.1 christos }; 513 1.1 christos 514 1.1 christos Contains_nested_static_instance(int i, int j) : x(i), y(j) {} 515 1.1 christos 516 1.1 christos int x; 517 1.1 christos int y; 518 1.1 christos 519 1.1 christos static Contains_nested_static_instance null; 520 1.1 christos static Nested yy; 521 1.1 christos }; 522 1.1 christos 523 1.1 christos Contains_nested_static_instance Contains_nested_static_instance::null(0, 0); 524 1.1 christos Contains_nested_static_instance::Nested Contains_nested_static_instance::yy(5); 525 1.1 christos Contains_nested_static_instance 526 1.1 christos Contains_nested_static_instance::Nested::xx(1,2); 527 1.1 christos Contains_nested_static_instance cnsi(30,40); 528 1.1 christos 529 1.1 christos typedef struct { 530 1.1 christos int one; 531 1.1 christos int two; 532 1.1 christos } tagless_struct; 533 1.1 christos tagless_struct v_tagless; 534 1.1 christos 535 1.8 christos class class_with_typedefs 536 1.8 christos { 537 1.8 christos public: 538 1.8 christos typedef int public_int; 539 1.8 christos protected: 540 1.8 christos typedef int protected_int; 541 1.8 christos private: 542 1.8 christos typedef int private_int; 543 1.8 christos 544 1.8 christos public: 545 1.8 christos class_with_typedefs () 546 1.8 christos : public_int_ (1), protected_int_ (2), private_int_ (3) {} 547 1.8 christos public_int add_public (public_int a) { return a + public_int_; } 548 1.8 christos public_int add_all (int a) 549 1.8 christos { return add_public (a) + add_protected (a) + add_private (a); } 550 1.8 christos 551 1.8 christos protected: 552 1.8 christos protected_int add_protected (protected_int a) { return a + protected_int_; } 553 1.8 christos 554 1.8 christos private: 555 1.8 christos private_int add_private (private_int a) { return a + private_int_; } 556 1.8 christos 557 1.8 christos protected: 558 1.8 christos public_int public_int_; 559 1.8 christos protected_int protected_int_; 560 1.8 christos private_int private_int_; 561 1.8 christos }; 562 1.8 christos 563 1.8 christos class class_with_public_typedef 564 1.8 christos { 565 1.8 christos int a; 566 1.8 christos public: 567 1.8 christos typedef int INT; 568 1.8 christos INT b; 569 1.8 christos }; 570 1.8 christos 571 1.8 christos class class_with_protected_typedef 572 1.8 christos { 573 1.8 christos int a; 574 1.8 christos protected: 575 1.8 christos typedef int INT; 576 1.8 christos INT b; 577 1.8 christos }; 578 1.8 christos 579 1.8 christos class class_with_private_typedef 580 1.8 christos { 581 1.8 christos int a; 582 1.8 christos private: 583 1.8 christos typedef int INT; 584 1.8 christos INT b; 585 1.8 christos }; 586 1.8 christos 587 1.8 christos struct struct_with_public_typedef 588 1.8 christos { 589 1.8 christos int a; 590 1.8 christos public: 591 1.8 christos typedef int INT; 592 1.8 christos INT b; 593 1.8 christos }; 594 1.8 christos 595 1.8 christos struct struct_with_protected_typedef 596 1.8 christos { 597 1.8 christos int a; 598 1.8 christos protected: 599 1.8 christos typedef int INT; 600 1.8 christos INT b; 601 1.8 christos }; 602 1.8 christos 603 1.8 christos struct struct_with_private_typedef 604 1.8 christos { 605 1.8 christos int a; 606 1.8 christos private: 607 1.8 christos typedef int INT; 608 1.8 christos INT b; 609 1.8 christos }; 610 1.8 christos 611 1.1 christos void dummy() 612 1.1 christos { 613 1.1 christos v_bool = true; 614 1.1 christos v_bool_array[0] = false; 615 1.1 christos v_bool_array[1] = v_bool; 616 1.1 christos } 617 1.1 christos 618 1.1 christos void use_methods () 619 1.1 christos { 620 1.1 christos /* Refer to methods so that they don't get optimized away. */ 621 1.1 christos int i; 622 1.1 christos i = class_param.Aptr_a (&g_A); 623 1.1 christos i = class_param.Aptr_x (&g_A); 624 1.1 christos i = class_param.Aref_a (g_A); 625 1.1 christos i = class_param.Aref_x (g_A); 626 1.1 christos i = class_param.Aval_a (g_A); 627 1.1 christos i = class_param.Aval_x (g_A); 628 1.1 christos 629 1.1 christos base1 b (3); 630 1.1 christos } 631 1.1 christos 632 1.8 christos struct Inner 633 1.8 christos { 634 1.8 christos static Inner instance; 635 1.8 christos }; 636 1.8 christos 637 1.8 christos struct Outer 638 1.8 christos { 639 1.8 christos Inner inner; 640 1.8 christos static Outer instance; 641 1.8 christos }; 642 1.8 christos 643 1.8 christos Inner Inner::instance; 644 1.8 christos Outer Outer::instance; 645 1.1 christos 646 1.1 christos int 647 1.1 christos main() 648 1.1 christos { 649 1.11 christos int Foo::* pmi = &Foo::y; 650 1.11 christos 651 1.1 christos dummy(); 652 1.1 christos inheritance1 (); 653 1.1 christos inheritance3 (); 654 1.1 christos enums1 (); 655 1.1 christos 656 1.1 christos /* Make sure the AIX linker doesn't remove the variable. */ 657 1.1 christos v_tagless.one = 5; 658 1.1 christos 659 1.1 christos use_methods (); 660 1.1 christos 661 1.1 christos return foo.*pmi; 662 1.1 christos } 663 1.1 christos 664 1.1 christos /* Create an instance for some classes, otherwise they get optimized away. */ 665 1.1 christos 666 1.1 christos default_public_struct default_public_s; 667 1.1 christos explicit_public_struct explicit_public_s; 668 1.1 christos protected_struct protected_s; 669 1.1 christos private_struct private_s; 670 1.1 christos mixed_protection_struct mixed_protection_s; 671 1.1 christos public_class public_c; 672 1.1 christos protected_class protected_c; 673 1.1 christos default_private_class default_private_c; 674 1.1 christos explicit_private_class explicit_private_c; 675 1.1 christos mixed_protection_class mixed_protection_c; 676 1.8 christos class_with_typedefs class_with_typedefs_c; 677 1.8 christos class_with_public_typedef class_with_public_typedef_c; 678 1.8 christos class_with_protected_typedef class_with_protected_typedef_c; 679 1.8 christos class_with_private_typedef class_with_private_typedef_c; 680 1.8 christos struct_with_public_typedef struct_with_public_typedef_s; 681 1.8 christos struct_with_protected_typedef struct_with_protected_typedef_s; 682 1.8 christos struct_with_private_typedef struct_with_private_typedef_s; 683