Commit 18232de4 by Paolo Carlini Committed by Paolo Carlini

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
parent c4ab64c6
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> 2011-10-27 Jason Merrill <jason@redhat.com>
* semantics.c (cxx_eval_outermost_constant_expr): Check * semantics.c (cxx_eval_outermost_constant_expr): Check
......
...@@ -13741,14 +13741,12 @@ tsubst_copy_and_build (tree t, ...@@ -13741,14 +13741,12 @@ tsubst_copy_and_build (tree t,
else if (TREE_CODE (member) == SCOPE_REF else if (TREE_CODE (member) == SCOPE_REF
&& TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR) && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
{ {
tree tmpl;
tree args;
/* Lookup the template functions now that we know what the /* Lookup the template functions now that we know what the
scope is. */ scope is. */
tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0); tree scope = TREE_OPERAND (member, 0);
args = TREE_OPERAND (TREE_OPERAND (member, 1), 1); tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl, tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
member = lookup_qualified_name (scope, tmpl,
/*is_type_p=*/false, /*is_type_p=*/false,
/*complain=*/false); /*complain=*/false);
if (BASELINK_P (member)) if (BASELINK_P (member))
...@@ -13762,7 +13760,7 @@ tsubst_copy_and_build (tree t, ...@@ -13762,7 +13760,7 @@ tsubst_copy_and_build (tree t,
} }
else else
{ {
qualified_name_lookup_error (object_type, tmpl, member, qualified_name_lookup_error (scope, tmpl, member,
input_location); input_location);
return error_mark_node; return error_mark_node;
} }
......
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> 2011-10-28 Steven G. Kargl <kargl@gcc.gnu.org>
* gfortran.dg/nearest_5.f90: New test. * gfortran.dg/nearest_5.f90: New test.
......
// 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;
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