aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2000-03-13 11:12:13 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2000-03-13 11:12:13 +0000
commit302e5c4601a8593b578f8af34036b631b53f94c7 (patch)
treed425e3aac901749537f51be8b6de34df85a620e4
parent9328904cdf4c4f74be2b74f23b959df0b51c7b40 (diff)
downloadgcc-302e5c4601a8593b578f8af34036b631b53f94c7.zip
gcc-302e5c4601a8593b578f8af34036b631b53f94c7.tar.gz
gcc-302e5c4601a8593b578f8af34036b631b53f94c7.tar.bz2
* g++.old-deja/g++.warn/inline.C: New test.
From-SVN: r32504
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.old-deja/g++.warn/inline.C69
2 files changed, 73 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d6d3feb..ace87e8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2000-03-13 Nathan Sidwell <nathan@codesourcery.com>
+
+ * g++.old-deja/g++.warn/inline.C: New test.
+
2000-03-08 Jason Merrill <jason@casey.cygnus.com>
* lib/g++.exp (g++_init): Don't put { } around -fmessage-length=0.
diff --git a/gcc/testsuite/g++.old-deja/g++.warn/inline.C b/gcc/testsuite/g++.old-deja/g++.warn/inline.C
new file mode 100644
index 0000000..f18f1a0
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.warn/inline.C
@@ -0,0 +1,69 @@
+// 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
+}