Commit 66ce8ff7 by Nathan Sidwell Committed by Nathan Sidwell

[PR c++/839888] Baselink tsubst ICE

https://gcc.gnu.org/ml/gcc-patches/2018-01/msg01954.html
	PR c++/83988
	* pt.c (tsubst_baselink): Remove optype assert.
	* ptree.c (cxx_print_xnode): <case BASELINK> Print BASELINK_OPTYPE.

	PR c++/83988
	* g++.dg/template/pr83988.C: New.

From-SVN: r256986
parent 55a46cb5
2018-01-23 Nathan Sidwell <nathan@acm.org>
PR c++/83988
* pt.c (tsubst_baselink): Remove optype assert.
* ptree.c (cxx_print_xnode): <case BASELINK> Print BASELINK_OPTYPE.
2018-01-23 Jakub Jelinek <jakub@redhat.com>
PR c++/83958
......
......@@ -14447,11 +14447,8 @@ tsubst_baselink (tree baselink, tree object_type,
fns = BASELINK_FUNCTIONS (baselink);
}
else
{
gcc_assert (optype == BASELINK_OPTYPE (baselink));
/* We're going to overwrite pieces below, make a duplicate. */
baselink = copy_node (baselink);
}
/* If lookup found a single function, mark it as used at this point.
(If lookup found multiple functions the one selected later by
......
......@@ -215,6 +215,7 @@ cxx_print_xnode (FILE *file, tree node, int indent)
print_node (file, "binfo", BASELINK_BINFO (node), indent + 4);
print_node (file, "access_binfo", BASELINK_ACCESS_BINFO (node),
indent + 4);
print_node (file, "optype", BASELINK_OPTYPE (node), indent + 4);
break;
case OVERLOAD:
print_node (file, "function", OVL_FUNCTION (node), indent+4);
......
2018-01-23 Nathan Sidwell <nathan@acm.org>
PR c++/83988
* g++.dg/template/pr83988.C: New.
2018-01-23 Jakub Jelinek <jakub@redhat.com>
PR c++/82882
......
// PR 83988 ICE
template<class T> struct optional {};
struct get_from_json {
template<typename GetWhat>
operator optional<GetWhat>() const {return optional<GetWhat> ();}
template<typename AsWhat>
optional<AsWhat> maybe() const
{
return this->operator optional<AsWhat>();
}
};
void test()
{
get_from_json().maybe<int>();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment