Merged trunk at revision 161680 into branch.
[official-gcc.git] / gcc / testsuite / g++.dg / ipa / iinline-3.C
blob3daee9a868161a5ed81d4a841bafb51fc77f5d9d
1 /* Verify that we do not indirect-inline using member pointer
2    parameters which have been modified.  */
3 /* { dg-do run } */
4 /* { dg-options "-O3 -fno-early-inlining"  } */
5 /* { dg-add-options bind_pic_locally } */
7 extern "C" void abort (void);
9 class String
11 private:
12   const char *data;
14 public:
15   String (const char *d) : data(d)
16   {}
18   int funcOne (int stuff) const;
19   int funcTwo (int stuff) const;
23 int String::funcOne (int stuff) const
25   return stuff + 1;
28 int String::funcTwo (int stuff) const
30   return stuff + 100;
33 int (String::* gmp)(int stuff) const = &String::funcTwo;
35 int docalling_1 (int (String::* f)(int stuff) const)
37   String S ("muhehehe");
39   return (S.*f)(4);
42 int docalling (int a, int (String::* f)(int stuff) const)
44   if (a < 200)
45     f = gmp;
47   return docalling_1 (f);
50 int __attribute__ ((noinline,noclone)) get_input (void)
52   return 1;
55 int main (int argc, char *argv[])
57   int i = 0;
58   while (i < 10)
59     i += docalling (get_input (), &String::funcOne);
61   if (i != 104)
62     abort();
63   return 0;