Commit 712c948a by Jason Merrill Committed by Jason Merrill

re PR c++/50020 ([C++0x] internal compiler error range for in templated class)

	PR c++/50020
	* semantics.c (finish_call_expr): Don't look at 'this' if we
	had an explicit object argument.

From-SVN: r177567
parent 473b30ce
2011-08-08 Jason Merrill <jason@redhat.com> 2011-08-08 Jason Merrill <jason@redhat.com>
PR c++/50020
* semantics.c (finish_call_expr): Don't look at 'this' if we
had an explicit object argument.
PR c++/50011 PR c++/50011
* typeck2.c (check_narrowing): Fix integer logic. * typeck2.c (check_narrowing): Fix integer logic.
......
...@@ -2042,12 +2042,14 @@ finish_call_expr (tree fn, VEC(tree,gc) **args, bool disallow_virtual, ...@@ -2042,12 +2042,14 @@ finish_call_expr (tree fn, VEC(tree,gc) **args, bool disallow_virtual,
expressions with no type as being dependent. */ expressions with no type as being dependent. */
if (type_dependent_expression_p (fn) if (type_dependent_expression_p (fn)
|| any_type_dependent_arguments_p (*args) || any_type_dependent_arguments_p (*args)
/* For a non-static member function, we need to specifically /* For a non-static member function that doesn't have an
explicit object argument, we need to specifically
test the type dependency of the "this" pointer because it test the type dependency of the "this" pointer because it
is not included in *ARGS even though it is considered to is not included in *ARGS even though it is considered to
be part of the list of arguments. Note that this is be part of the list of arguments. Note that this is
related to CWG issues 515 and 1005. */ related to CWG issues 515 and 1005. */
|| (non_static_member_function_p (fn) || (TREE_CODE (fn) != COMPONENT_REF
&& non_static_member_function_p (fn)
&& current_class_ref && current_class_ref
&& type_dependent_expression_p (current_class_ref))) && type_dependent_expression_p (current_class_ref)))
{ {
......
2011-08-08 Jason Merrill <jason@redhat.com> 2011-08-08 Jason Merrill <jason@redhat.com>
* g++.dg/cpp0x/range-for20.C: Adjust to test 50020 as well.
* g++.dg/cpp0x/initlist5.C: Add 50011 test. * g++.dg/cpp0x/initlist5.C: Add 50011 test.
2011-08-07 Janus Weil <janus@gcc.gnu.org> 2011-08-07 Janus Weil <janus@gcc.gnu.org>
......
// PR c++/49834 // PR c++/49834
// PR c++/50020
// { dg-options -std=c++0x } // { dg-options -std=c++0x }
struct A struct A
...@@ -17,16 +18,19 @@ struct C ...@@ -17,16 +18,19 @@ struct C
}; };
template <typename Ret> template <typename Ret>
Ret f(const C &p) struct D
{ {
for (const B &i: p) // OK Ret f(const C &p)
i.second.get_value<int>(); {
for (const auto &i: p) // ERROR for (const B &i: p) // OK
i.second.get_value<int>(); i.second.get_value<int>();
return Ret(0); for (const auto &i: p) // ERROR
} i.second.get_value<int>();
return Ret(0);
}
};
void g() void g()
{ {
f<int>(C()); D<int>().f(C());
} }
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