aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2011-10-28 18:40:22 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2011-10-28 18:40:22 +0000
commit18232de4dbc48214f26d2d7fc442ef4224afe3b0 (patch)
tree2559b1579f0df1809d23ac9a805dbfdf6ecea600 /gcc
parentc4ab64c640c78b4800b9b1917835c9b58ce16027 (diff)
downloadgcc-18232de4dbc48214f26d2d7fc442ef4224afe3b0.zip
gcc-18232de4dbc48214f26d2d7fc442ef4224afe3b0.tar.gz
gcc-18232de4dbc48214f26d2d7fc442ef4224afe3b0.tar.bz2
re PR c++/50864 (ICE with decltype and "declval" from another namespace)
/cp 2011-10-28 Paolo Carlini <paolo.carlini@oracle.com> PR c++/50864 * pt.c (tsubst_copy_and_build): Fix qualified_name_lookup_error call in case COMPONENT_REF. /testsuite 2011-10-28 Paolo Carlini <paolo.carlini@oracle.com> PR c++/50864 * g++.dg/template/crash109.C: New. From-SVN: r180623
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/pt.c12
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/template/crash109.C10
4 files changed, 26 insertions, 7 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 9791ab5..14723f0 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2011-10-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/50864
+ * pt.c (tsubst_copy_and_build): Fix qualified_name_lookup_error
+ call in case COMPONENT_REF.
+
2011-10-27 Jason Merrill <jason@redhat.com>
* semantics.c (cxx_eval_outermost_constant_expr): Check
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 7aea72d..dc63366 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -13741,14 +13741,12 @@ tsubst_copy_and_build (tree t,
else if (TREE_CODE (member) == SCOPE_REF
&& TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
{
- tree tmpl;
- tree args;
-
/* Lookup the template functions now that we know what the
scope is. */
- tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
- args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
- member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
+ tree scope = TREE_OPERAND (member, 0);
+ tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
+ tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
+ member = lookup_qualified_name (scope, tmpl,
/*is_type_p=*/false,
/*complain=*/false);
if (BASELINK_P (member))
@@ -13762,7 +13760,7 @@ tsubst_copy_and_build (tree t,
}
else
{
- qualified_name_lookup_error (object_type, tmpl, member,
+ qualified_name_lookup_error (scope, tmpl, member,
input_location);
return error_mark_node;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f2f1c58..6937815 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-10-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/50864
+ * g++.dg/template/crash109.C: New.
+
2011-10-28 Steven G. Kargl <kargl@gcc.gnu.org>
* gfortran.dg/nearest_5.f90: New test.
diff --git a/gcc/testsuite/g++.dg/template/crash109.C b/gcc/testsuite/g++.dg/template/crash109.C
new file mode 100644
index 0000000..3f2f81e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/crash109.C
@@ -0,0 +1,10 @@
+// PR c++/50864
+
+namespace impl
+{
+ template <class T> T create();
+}
+
+template <class T, class U, __SIZE_TYPE__
+ = sizeof(impl::create<T>() -> impl::create<U>())> // { dg-error "not a member" }
+struct foo;