From dd6f4f897e18adc7b60a3efe5e78c034e747cc22 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 22 Jun 2010 22:42:50 +0200 Subject: [PATCH] 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/diagnostic/method1.C: New test. From-SVN: r161227 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/error.c | 4 +++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/diagnostic/method1.C | 20 ++++++++++++++++++++ 4 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/diagnostic/method1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 5d36ad3c977..31479189e88 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-06-21 Jason Merrill * typeck.c (comp_except_specs): Fix ce_derived with noexcept. diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 2cddc6db4b2..1902a135b89 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -1759,7 +1759,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 056fd963482..a954c9bbe23 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-06-22 Jakub Jelinek + + PR c++/44627 + * g++.dg/diagnostic/method1.C: New test. + 2010-06-22 Cary Coutant * g++.dg/debug/dwarf2/dwarf4-typedef.C: New test. diff --git a/gcc/testsuite/g++.dg/diagnostic/method1.C b/gcc/testsuite/g++.dg/diagnostic/method1.C new file mode 100644 index 00000000000..8e1225d0722 --- /dev/null +++ b/gcc/testsuite/g++.dg/diagnostic/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 (); +} -- 2.30.2