--- /dev/null
+// Build don't link:
+// Special g++ Options: -ansi -pedantic-errors -Winline -O1
+
+// Copyright (C) 2000 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 9 Mar 2000 <nathan@codesourcery.com>
+
+// derived from a bug report by Benjamin Kosnik <bkoz@cygnus.com>
+
+// __FUNCTION__ was erroneously causing us to issue a `cannot inline'
+// diagnostic, even though we'd (a) inlined it, (b) been forced to issue an
+// out of line body by taking it's address, (c) not used __FUNCTION__.
+
+inline void wibble ()
+{}
+
+inline void wobble ()
+{} // gets bogus error - cannot inline
+
+void bar (void (*)());
+
+void bar1 ()
+{
+ wibble (); // can be inlined
+ void (*ptr) () = wobble; // force out of line issue
+
+ bar (ptr); // make sure we make use of it
+}
+
+struct B
+{
+ void mwibble ()
+ {};
+ void mwobble ()
+ {}; // gets bogus error - cannot inline
+
+ static void swibble ()
+ {};
+ static void swobble ()
+ {}; // gets bogus error - cannot inline
+};
+
+void bar (void (B::*)());
+
+void bar2 ()
+{
+ B::swibble (); // can be inlined
+ void (*ptr) () = &B::swobble; // force out of line issue
+
+ bar (ptr); // make sure we make use of it
+}
+
+void bar3 (B *b)
+{
+ b->mwibble (); // can be inlined
+ void (B::*ptr) () = &B::mwobble; // force out of line issue
+
+ bar (ptr); // make sure we make use of it
+}
+
+struct C
+{
+ virtual void vwobble ()
+ {}; // gets bogus error - cannot inline
+};
+
+void bar4 ()
+{
+ C c; // force issue of C's vtable etc
+}