https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63349
--- Comment #5 from Marek Polacek <mpolacek at gcc dot gnu.org> --- In finish_class_member_access_expr we have expr = build_class_member_access_expr (object, member, access_path, /*preserve_reference=*/false, complain); if (processing_template_decl && expr != error_mark_node) { if (BASELINK_P (member)) { if (TREE_CODE (orig_name) == SCOPE_REF) BASELINK_QUALIFIED_P (member) = 1; orig_name = member; } return build_min_non_dep (COMPONENT_REF, expr, orig_object, orig_name, NULL_TREE); build_class_member_access_expr builds a component_ref that seems to be ok; its arg1 is a field_decl. But the subsequent build_min_non_dep call changes this field_decl into ORIG_NAME, which is an identifier_node.