A very recent regression: trippels@gcc2-power8 status % cat testwave_dll.ii class A {}; struct predefined_macros { struct B { A (predefined_macros::*generator)(); }; }; template <typename> class C { void m_fn1(); predefined_macros predef; }; template <typename ContextT> void C<ContextT>::m_fn1() { predefined_macros::B m = (predef.*m.generator)(); } trippels@gcc2-power8 status % g++ -c testwave_dll.ii testwave_dll.ii: In member function ‘void C< <template-parameter-1-1> >::m_fn1()’: testwave_dll.ii:12:48: internal compiler error: tree check: expected call_expr, have target_expr in build_min_non_dep_call_vec, at cp/tree.c:2744 predefined_macros::B m = (predef.*m.generator)(); ^ 0x10d8c8f3 tree_check_failed(tree_node const*, char const*, int, char const*, ...) ../../gcc/gcc/tree.c:9606 0x103c4bcb tree_check ../../gcc/gcc/tree.h:2997 0x103c4bcb build_min_non_dep_call_vec(tree_node*, tree_node*, vec<tree_node*, va_gc, vl_embed>*) ../../gcc/gcc/cp/tree.c:2744 0x102a18d3 build_offset_ref_call_from_tree(tree_node*, vec<tree_node*, va_gc, vl_embed>**, int) ../../gcc/gcc/cp/decl2.c:5001 0x102e5e3f cp_parser_postfix_expression ../../gcc/gcc/cp/parser.c:6812 0x102f2663 cp_parser_unary_expression ../../gcc/gcc/cp/parser.c:7901 0x102f36e3 cp_parser_cast_expression ../../gcc/gcc/cp/parser.c:8578 0x102f3ddb cp_parser_binary_expression ../../gcc/gcc/cp/parser.c:8680 0x102f4a5f cp_parser_assignment_expression ../../gcc/gcc/cp/parser.c:8968 0x102f5257 cp_parser_constant_expression ../../gcc/gcc/cp/parser.c:9236 0x102f5f17 cp_parser_initializer_clause ../../gcc/gcc/cp/parser.c:20681 0x102f8817 cp_parser_initializer ../../gcc/gcc/cp/parser.c:20622 0x1030fdab cp_parser_init_declarator ../../gcc/gcc/cp/parser.c:18494 0x1031054f cp_parser_simple_declaration ../../gcc/gcc/cp/parser.c:12278 0x10310c47 cp_parser_block_declaration ../../gcc/gcc/cp/parser.c:12147 0x103120df cp_parser_declaration_statement ../../gcc/gcc/cp/parser.c:11759 0x102e0b57 cp_parser_statement ../../gcc/gcc/cp/parser.c:10441 0x102e1597 cp_parser_statement_seq_opt ../../gcc/gcc/cp/parser.c:10719 0x102e176f cp_parser_compound_statement ../../gcc/gcc/cp/parser.c:10673 0x1030dfab cp_parser_function_body ../../gcc/gcc/cp/parser.c:20541
Started with r231640: commit d175f0193ed47b61eafd213ca2d3dde73f8f5996 Author: ppalka <ppalka@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Tue Dec 15 03:33:53 2015 +0000 Fix PR c++/21802 (two-stage name lookup fails for operators)
Thanks for the ping.
Author: ppalka Date: Sat Jan 16 02:27:36 2016 New Revision: 232461 URL: https://gcc.gnu.org/viewcvs?rev=232461&root=gcc&view=rev Log: 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. Added: trunk/gcc/testsuite/g++.dg/template/pr68936.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/tree.c trunk/gcc/testsuite/ChangeLog
Fixed.