This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: CVS g++ new warning [-Winline -Werror -O1]
- To: Jason Merrill <jason at cygnus dot com>
- Subject: Re: CVS g++ new warning [-Winline -Werror -O1]
- From: Nathan Sidwell <nathan at codesourcery dot com>
- Date: Mon, 13 Mar 2000 11:13:16 +0000
- CC: Mark Mitchell <mark at codesourcery dot com>, bkoz at cygnus dot com, gcc-patches at gcc dot gnu dot org
- Organization: CodeSourcery, LLC
- References: <200003090613.WAA01502@haight.constant.com> <20000308224448P.mitchell@codesourcery.com> <38C7D42D.168B7C3F@codesourcery.com> <u98zzqqruq.fsf@yorick.cygnus.com>
Jason Merrill wrote:
> I applied this, as well as the following fix:
Thanks!
> TREE_STATIC means "not auto"; you want !TREE_PUBLIC.
Thanks for correcting my errors.
I installed the attached testcase
2000-03-13 Nathan Sidwell <nathan@codesourcery.com>
* g++.old-deja/g++.warn/inline.C: New test.
nathan
--
Dr Nathan Sidwell :: http://www.codesourcery.com :: CodeSourcery LLC
'But that's a lie.' - 'Yes it is. What's your point?'
nathan@codesourcery.com : http://www.cs.bris.ac.uk/~nathan/ : nathan@acm.org
// 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
}