From: Patrick Palka Date: Sat, 16 Jan 2016 02:27:36 +0000 (+0000) Subject: re PR c++/68936 (ICE: tree check: expected call_expr, have target_expr in build_min_n... X-Git-Tag: upstream/12.2.0~49446 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=aa2500e9bc6ce022c604fefb5f9c60d6fd7134f8;p=platform%2Fupstream%2Fgcc.git re PR c++/68936 (ICE: tree check: expected call_expr, have target_expr in build_min_non_dep_call_vec, at cp/tree.c:2744) Fix PR c++/68936 gcc/cp/ChangeLog: PR c++/68936 * tree.c (build_min_non_dep_call_vec): Don't retain the KOENIG_LOOKUP_P flag of the non-dependent expression that's been built. (build_min_non_dep_op_overload): Instead, do it here. gcc/testsuite/ChangeLog: PR c++/68936 * g++.dg/template/pr68936.C: New test. From-SVN: r232461 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ba08d09..fbf8064 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2016-01-16 Patrick Palka + + PR c++/68936 + * tree.c (build_min_non_dep_call_vec): Don't retain the + KOENIG_LOOKUP_P flag of the non-dependent expression that's + been built. + (build_min_non_dep_op_overload): Instead, do it here. + 2016-01-15 Jakub Jelinek PR bootstrap/68271 diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index e918252..d4cf310 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -2747,7 +2747,6 @@ build_min_non_dep_call_vec (tree non_dep, tree fn, vec *argvec) non_dep = TREE_OPERAND (non_dep, 0); TREE_TYPE (t) = TREE_TYPE (non_dep); TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep); - KOENIG_LOOKUP_P (t) = KOENIG_LOOKUP_P (non_dep); return convert_from_reference (t); } @@ -2810,6 +2809,11 @@ build_min_non_dep_op_overload (enum tree_code op, call = build_min_non_dep_call_vec (non_dep, fn, args); release_tree_vector (args); + tree call_expr = call; + if (REFERENCE_REF_P (call_expr)) + call_expr = TREE_OPERAND (call_expr, 0); + KOENIG_LOOKUP_P (call_expr) = KOENIG_LOOKUP_P (non_dep); + return call; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 451003a..600329a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-01-16 Patrick Palka + + PR c++/68936 + * g++.dg/template/pr68936.C: New test. + 2016-01-15 David Edelsohn PR target/68609 diff --git a/gcc/testsuite/g++.dg/template/pr68936.C b/gcc/testsuite/g++.dg/template/pr68936.C new file mode 100644 index 0000000..ecfc09e --- /dev/null +++ b/gcc/testsuite/g++.dg/template/pr68936.C @@ -0,0 +1,20 @@ +// PR c++/68936 + +class A {}; + +struct predefined_macros { + struct B { + A (predefined_macros::*generator)(); + }; +}; + +template class C { + void m_fn1(); + predefined_macros predef; +}; + +predefined_macros::B m; + +template void C::m_fn1() { + (predef.*m.generator)(); +}