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> 2018-01-23 Jakub Jelinek <jakub@redhat.com>
PR c++/83958 PR c++/83958
......
...@@ -14447,11 +14447,8 @@ tsubst_baselink (tree baselink, tree object_type, ...@@ -14447,11 +14447,8 @@ tsubst_baselink (tree baselink, tree object_type,
fns = BASELINK_FUNCTIONS (baselink); fns = BASELINK_FUNCTIONS (baselink);
} }
else else
{ /* We're going to overwrite pieces below, make a duplicate. */
gcc_assert (optype == BASELINK_OPTYPE (baselink)); baselink = copy_node (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 a single function, mark it as used at this point.
(If lookup found multiple functions the one selected later by (If lookup found multiple functions the one selected later by
......
...@@ -215,6 +215,7 @@ cxx_print_xnode (FILE *file, tree node, int indent) ...@@ -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, "binfo", BASELINK_BINFO (node), indent + 4);
print_node (file, "access_binfo", BASELINK_ACCESS_BINFO (node), print_node (file, "access_binfo", BASELINK_ACCESS_BINFO (node),
indent + 4); indent + 4);
print_node (file, "optype", BASELINK_OPTYPE (node), indent + 4);
break; break;
case OVERLOAD: case OVERLOAD:
print_node (file, "function", OVL_FUNCTION (node), indent+4); 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> 2018-01-23 Jakub Jelinek <jakub@redhat.com>
PR c++/82882 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