aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2010-02-12 14:46:29 -0500
committerJason Merrill <jason@gcc.gnu.org>2010-02-12 14:46:29 -0500
commit96b4a0b57e64c29c6232ac80765f93a16ff6293a (patch)
treedf621a5758c367f798b27ed22c08d0bdde486143
parent9ab999338b1a5b3fa79f59dbe68e9b13673e7e9d (diff)
downloadgcc-96b4a0b57e64c29c6232ac80765f93a16ff6293a.zip
gcc-96b4a0b57e64c29c6232ac80765f93a16ff6293a.tar.gz
gcc-96b4a0b57e64c29c6232ac80765f93a16ff6293a.tar.bz2
re PR c++/43054 ([C++0x] ambiguous overload from identical declarations using decltype)
PR c++/43054 * tree.c (cp_tree_equal): Correct CALL_EXPR logic, handle EXPR_PACK_EXPANSION. From-SVN: r156737
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/tree.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic99.C22
4 files changed, 40 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 18d1232..ba2fd04 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2010-02-12 Jason Merrill <jason@redhat.com>
+
+ PR c++/43054
+ * tree.c (cp_tree_equal): Correct CALL_EXPR logic, handle
+ EXPR_PACK_EXPANSION.
+
2010-02-12 Jakub Jelinek <jakub@redhat.com>
PR c++/43033
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index 678c7dd..89ac3dd 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -2060,7 +2060,9 @@ cp_tree_equal (tree t1, tree t2)
arg2 = next_call_expr_arg (&iter2))
if (!cp_tree_equal (arg1, arg2))
return false;
- return (arg1 || arg2);
+ if (arg1 || arg2)
+ return false;
+ return true;
}
case TARGET_EXPR:
@@ -2197,6 +2199,10 @@ cp_tree_equal (tree t1, tree t2)
return same_type_p (TRAIT_EXPR_TYPE1 (t1), TRAIT_EXPR_TYPE1 (t2))
&& same_type_p (TRAIT_EXPR_TYPE2 (t1), TRAIT_EXPR_TYPE2 (t2));
+ case EXPR_PACK_EXPANSION:
+ return cp_tree_equal (PACK_EXPANSION_PATTERN (t1),
+ PACK_EXPANSION_PATTERN (t2));
+
default:
break;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b93be3d..9ec83bf 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-02-12 Jason Merrill <jason@redhat.com>
+
+ PR c++/43054
+ * g++.dg/cpp0x/variadic99.C: New.
+
2010-02-12 Jakub Jelinek <jakub@redhat.com>
* gcc.dg/guality/guality.h (GUALCVT): Zero extend instead of
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic99.C b/gcc/testsuite/g++.dg/cpp0x/variadic99.C
new file mode 100644
index 0000000..4572127
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic99.C
@@ -0,0 +1,22 @@
+// PR c++/43054
+// { dg-options "-std=c++0x" }
+
+template<typename R> struct future { };
+
+template<typename Fn, typename... Args>
+ auto
+ async(Fn&& fn, Args&&... args)
+ -> future<decltype(fn(args...))>;
+
+template<typename Fn, typename... Args>
+ auto
+ async(Fn&& fn, Args&&... args)
+ -> future<decltype(fn(args...))>;
+
+int work2(int value);
+
+void work(int value)
+{
+ async(work2, value);
+}
+