re PR c++/8391 (infinite loop in cp/decl2.c(finish_file))

PR c++/8391
	* toplev.c (rest_of_compilation): Do not refuse to output code for
	an inline function in a local class.

	PR c++/8391
	* g++.dg/opt/local1.C: New test.

From-SVN: r58733
This commit is contained in:
Mark Mitchell 2002-11-02 00:57:26 +00:00 committed by Mark Mitchell
parent e0a82d932d
commit c5cee832e4
4 changed files with 34 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2002-11-01 Mark Mitchell <mark@codesourcery.com>
PR c++/8391
* toplev.c (rest_of_compilation): Do not refuse to output code for
an inline function in a local class.
2002-11-01 David O'Brien <obrien@FreeBSD.org>
* config/sparc/freebsd.h (CPP_CPU64_DEFAULT_SPEC): Define __arch64__.

View File

@ -1,3 +1,8 @@
2002-11-01 Mark Mitchell <mark@codesourcery.com>
PR c++/8391
* g++.dg/opt/local1.C: New test.
2002-10-30 Mark Mitchell <mark@codesourcery.com>
PR c++/8160

View File

@ -0,0 +1,20 @@
// { dg-options "-O" }
struct Outer {
struct Inner { virtual bool f() = 0; };
void g(Inner &) const;
};
inline void h(const Outer &o)
{
struct Local : public Outer::Inner {
virtual bool f() {};
};
Local l;
o.g(l);
}
void f(Outer &req) {
h (req);
}

View File

@ -2411,6 +2411,9 @@ rest_of_compilation (decl)
DECL_INITIAL (decl) = 0;
goto exit_rest_of_compilation;
}
else if (TYPE_P (parent))
/* A function in a local class should be treated normally. */
break;
/* If requested, consider whether to make this function inline. */
if ((DECL_INLINE (decl) && !flag_no_inline)