re PR c++/29225 (ICE in gimplify_expr, at gimplify.c:4513)

PR c++/29225
	* call.c (build_new_op): Call resolve_args before calling
	build_over_call.

	* g++.dg/template/crash72.C: New test.

From-SVN: r130126
This commit is contained in:
Jakub Jelinek 2007-11-13 00:17:18 +01:00 committed by Jakub Jelinek
parent d32034a78d
commit ffbf581329
4 changed files with 40 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2007-11-13 Jakub Jelinek <jakub@redhat.com>
PR c++/29225
* call.c (build_new_op): Call resolve_args before calling
build_over_call.
2007-11-11 Tom Tromey <tromey@redhat.com>
PR c++/17577:

View File

@ -3918,7 +3918,10 @@ build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
if (overloaded_p)
*overloaded_p = true;
result = build_over_call (cand, LOOKUP_NORMAL);
if (resolve_args (arglist) == error_mark_node)
result = error_mark_node;
else
result = build_over_call (cand, LOOKUP_NORMAL);
}
else
{

View File

@ -1,3 +1,8 @@
2007-11-13 Jakub Jelinek <jakub@redhat.com>
PR c++/29225
* g++.dg/template/crash72.C: New test.
2007-11-12 Eric Botcazou <ebotcazou@libertysurf.fr>
* g++.dg/opt/cfg5.C: New test.

View File

@ -0,0 +1,25 @@
// PR c++/29225
// { dg-do compile }
template <typename L, typename R> bool operator< (L x, R y);
struct T { int t (); };
class S {};
struct U
{
typedef int (T::* M) ();
M m;
bool operator() (S &x)
{
T a;
return (a.*m) < x; // { dg-error "invalid use of non-static member" }
}
};
void foo (S &x)
{
U m;
m.m = &T::t;
m (x);
}