re PR c++/17661 (ICE in create_tmp_var)

2004-10-13  Andrew Pinski  <pinskia@physics.uc.edu>

        PR c++/17661
        * testsuite/g++.dg/expr/for2.C: New test.

2004-10-13  Andrew Pinski  <pinskia@physics.uc.edu>

        PR c++/17661
        * semantics.c (finish_for_expr): Convert expression to void
        so that we don't create temporaries for a?b:c.

From-SVN: r88992
This commit is contained in:
Andrew Pinski 2004-10-13 17:18:16 +00:00 committed by Andrew Pinski
parent 38467a0deb
commit bcd46a7c65
4 changed files with 34 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2004-10-13 Andrew Pinski <pinskia@physics.uc.edu>
PR c++/17661
* semantics.c (finish_for_expr): Convert expression to void
so that we don't create temporaries for a?b:c.
2004-10-13 Kazu Hirata <kazu@cs.umass.edu>
* search.c: Fix a comment typo.

View File

@ -798,6 +798,14 @@ finish_for_expr (tree expr, tree for_stmt)
cxx_incomplete_type_error (expr, TREE_TYPE (expr));
expr = error_mark_node;
}
if (!processing_template_decl)
{
if (warn_sequence_point)
verify_sequence_points (expr);
expr = convert_to_void (expr, "3rd expression in for");
}
else if (!type_dependent_expression_p (expr))
convert_to_void (build_non_dependent_expr (expr), "3rd expression in for");
expr = maybe_cleanup_point_expr_void (expr);
FOR_EXPR (for_stmt) = expr;
}

View File

@ -1,3 +1,8 @@
2004-10-13 Andrew Pinski <pinskia@physics.uc.edu>
PR c++/17661
* testsuite/g++.dg/expr/for2.C: New test.
2004-10-13 Eric Botcazou <ebotcazou@libertysurf.fr>
* g++.dg/inherit/thunk1.C: Run on the SPARC.

View File

@ -0,0 +1,15 @@
// { dg-do compile }
// PR c++/17661
// We used to try to create a temprary for the condition
// expression in the for which was wrong.
struct C
{
C (const C &x);
};
C &f();
void breakme (C j, bool k)
{
for (;; k ? j : f()) ;
}