1 /* This testcase is part of GDB, the GNU debugger. 2 3 Copyright 1998, 1999, 2004 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 2 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, write to the Free Software 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 */ 19 20 21 22 extern "C" { 23 #include <stdio.h> 24 } 25 26 27 class A { 28 public: 29 A(); 30 int foo (int x); 31 int bar (int y); 32 virtual int baz (int z); 33 char c; 34 int j; 35 int jj; 36 static int s; 37 }; 38 39 class B { 40 public: 41 static int s; 42 }; 43 44 int A::s = 10; 45 int B::s = 20; 46 47 A::A() 48 { 49 c = 'x'; 50 j = 5; 51 } 52 53 int A::foo (int dummy) 54 { 55 j += 3; 56 return j + dummy; 57 } 58 59 int A::bar (int dummy) 60 { 61 int r; 62 j += 13; 63 r = this->foo(15); 64 return r + j + 2 * dummy; 65 } 66 67 int A::baz (int dummy) 68 { 69 int r; 70 j += 15; 71 r = this->foo(15); 72 return r + j + 12 * dummy; 73 } 74 75 int fum (int dummy) 76 { 77 return 2 + 13 * dummy; 78 } 79 80 typedef int (A::*PMF)(int); 81 82 typedef int A::*PMI; 83 84 int main () 85 { 86 A a; 87 A * a_p; 88 PMF pmf; 89 90 PMF * pmf_p; 91 PMI pmi; 92 93 a.j = 121; 94 a.jj = 1331; 95 96 int k; 97 98 a_p = &a; 99 100 pmi = &A::j; 101 pmf = &A::bar; 102 pmf_p = &pmf; 103 104 pmi = NULL; 105 106 k = (a.*pmf)(3); 107 108 pmi = &A::jj; 109 pmf = &A::foo; 110 pmf_p = &pmf; 111 112 k = (a.*pmf)(4); 113 114 k = (a.**pmf_p)(5); 115 116 k = a.*pmi; 117 118 119 k = a.bar(2); 120 121 k += fum (4); 122 123 B b; 124 125 k += b.s; 126 127 } 128