aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2019-03-18 15:37:00 -0400
committerJason Merrill <jason@gcc.gnu.org>2019-03-18 15:37:00 -0400
commit7834e5a0e103c7f07c789cbe7293c6c1400a1216 (patch)
tree97886d9c91f2fe477e6119e6ecaa89f7b04eaf30
parentd849cfaeeaf15a30170b0fb10b4f62075a1ee58b (diff)
downloadgcc-7834e5a0e103c7f07c789cbe7293c6c1400a1216.zip
gcc-7834e5a0e103c7f07c789cbe7293c6c1400a1216.tar.gz
gcc-7834e5a0e103c7f07c789cbe7293c6c1400a1216.tar.bz2
PR c++/89630 - ICE with dependent using-decl as template arg.
Even though these two using-declarations have the same effect, they are not the same declaration, and we don't need to work to treat them as the same like we do for typedefs. If we did need to, we would need to handle them specially in iterative_hash_template_arg as well as here. * tree.c (cp_tree_equal): Always return false for USING_DECL. From-SVN: r269777
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/tree.c9
2 files changed, 4 insertions, 8 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index d4dc5d7..76bc8ff 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2019-03-18 Jason Merrill <jason@redhat.com>
+ PR c++/89630 - ICE with dependent using-decl as template arg.
+ * tree.c (cp_tree_equal): Always return false for USING_DECL.
+
PR c++/89761 - ICE with sizeof... in pack expansion.
* pt.c (argument_pack_element_is_expansion_p): Handle
ARGUMENT_PACK_SELECT.
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index af077e7..718eed3 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -3661,6 +3661,7 @@ cp_tree_equal (tree t1, tree t2)
case TEMPLATE_DECL:
case IDENTIFIER_NODE:
case SSA_NAME:
+ case USING_DECL:
return false;
case BASELINK:
@@ -3787,14 +3788,6 @@ cp_tree_equal (tree t1, tree t2)
DEFERRED_NOEXCEPT_ARGS (t2)));
break;
- case USING_DECL:
- if (DECL_DEPENDENT_P (t1) && DECL_DEPENDENT_P (t2))
- return (cp_tree_equal (USING_DECL_SCOPE (t1),
- USING_DECL_SCOPE (t2))
- && cp_tree_equal (DECL_NAME (t1),
- DECL_NAME (t2)));
- return false;
-
case LAMBDA_EXPR:
/* Two lambda-expressions are never considered equivalent. */
return false;