From: Jakub Jelinek Date: Tue, 22 Jun 2010 20:48:24 +0000 (+0200) Subject: re PR c++/44627 (ICE in dump_expr, at cp/error.c:1735) X-Git-Tag: releases/gcc-4.4.5~232 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c52180763961dc9af9c31b5f1c448cad60e94713;p=thirdparty%2Fgcc.git re PR c++/44627 (ICE in dump_expr, at cp/error.c:1735) PR c++/44627 * error.c (dump_expr): Don't look at CALL_EXPR_ARG (t, 0) if the CALL_EXPR has no arguments. * g++.dg/other/method1.C: New test. From-SVN: r161229 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index eea3d7d350f2..295bcae218bf 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2010-06-22 Jakub Jelinek + + PR c++/44627 + * error.c (dump_expr): Don't look at CALL_EXPR_ARG (t, 0) if + the CALL_EXPR has no arguments. + 2010-05-27 Jason Merrill PR c++/43555 diff --git a/gcc/cp/error.c b/gcc/cp/error.c index aebd65f31d45..5d60f67ba198 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -1582,7 +1582,9 @@ dump_expr (tree t, int flags) if (TREE_CODE (fn) == OBJ_TYPE_REF) fn = resolve_virtual_fun_from_obj_type_ref (fn); - if (TREE_TYPE (fn) != NULL_TREE && NEXT_CODE (fn) == METHOD_TYPE) + if (TREE_TYPE (fn) != NULL_TREE + && NEXT_CODE (fn) == METHOD_TYPE + && call_expr_nargs (t)) { tree ob = CALL_EXPR_ARG (t, 0); if (TREE_CODE (ob) == ADDR_EXPR) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 739f2c616b7f..92bbd85c0aa9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-06-22 Jakub Jelinek + + PR c++/44627 + * g++.dg/other/method1.C: New test. + 2010-06-21 H.J. Lu Backport from mainline diff --git a/gcc/testsuite/g++.dg/other/method1.C b/gcc/testsuite/g++.dg/other/method1.C new file mode 100644 index 000000000000..8e1225d07224 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/method1.C @@ -0,0 +1,20 @@ +// PR c++/44627 +// { dg-do compile } + +struct A +{ + A *foo (); +}; + +template +void +bar () +{ + A::foo ().anything; // { dg-error "request for member" } +} + +void +baz () +{ + bar (); +}