Commit 5275f2bf by Jason Merrill Committed by Jason Merrill

re PR c++/8080 ([Regression in main trunk] g++ 3.3 ICE in make_decl_rtl)

        PR c++/8080
        * semantics.c (finish_for_cond, finish_while_stmt_cond): Don't mess
        with condition decls in a template.

From-SVN: r58282
parent 8a188e24
2002-10-18 Jason Merrill <jason@redhat.com>
PR c++/8080
* semantics.c (finish_for_cond, finish_while_cond): Don't mess
with condition decls in a template.
2002-10-17 Nathan Sidwell <nathan@codesourcery.com>
* class.c (add_method): Compare template parms too.
......
......@@ -317,7 +317,10 @@ finish_while_stmt_cond (cond, while_stmt)
tree while_stmt;
{
cond = maybe_convert_cond (cond);
if (getdecls () == NULL_TREE)
if (processing_template_decl)
/* Don't mess with condition decls in a template. */
FINISH_COND (cond, while_stmt, WHILE_COND (while_stmt));
else if (getdecls () == NULL_TREE)
/* It was a simple condition; install it. */
WHILE_COND (while_stmt) = cond;
else
......@@ -452,7 +455,10 @@ finish_for_cond (cond, for_stmt)
tree for_stmt;
{
cond = maybe_convert_cond (cond);
if (getdecls () == NULL_TREE)
if (processing_template_decl)
/* Don't mess with condition decls in a template. */
FINISH_COND (cond, for_stmt, FOR_COND (for_stmt));
else if (getdecls () == NULL_TREE)
/* It was a simple condition; install it. */
FOR_COND (for_stmt) = cond;
else
......
// PR c++/8080
// Bug: the transformation in finish_while_stmt_cond produced something
// that tsubst_expr handled badly. Fixed by not doing the transformation
// while parsing a template.
class TObject {};
struct TIter {
TObject *operator()();
};
template<class T>
void get_root_object(TIter& iobj) {
while ( TObject* pnew_obj = iobj() )
;
}
void foo(TIter& iobj)
{
get_root_object<int>(iobj);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment