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:
parent
38467a0deb
commit
bcd46a7c65
4 changed files with 34 additions and 0 deletions
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
15
gcc/testsuite/g++.dg/expr/for2.C
Normal file
15
gcc/testsuite/g++.dg/expr/for2.C
Normal 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()) ;
|
||||
}
|
Loading…
Add table
Reference in a new issue