From 570e2ca01e8a80aadd18eb0b85c982077e76aef4 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Mon, 1 Apr 2013 17:18:05 -0400 Subject: re PR c++/56794 (C++11 Error in range-based for with parameter pack array) PR c++/56794 * parser.c (cp_parser_range_for): Don't try to do auto deduction in a template if the type of the range is incomplete. From-SVN: r197324 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/parser.c | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'gcc/cp') diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ac22dc23445..c7e140ed579 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2013-04-01 Jason Merrill + PR c++/56794 + * parser.c (cp_parser_range_for): Don't try to do auto deduction + in a template if the type of the range is incomplete. + * call.c (add_function_candidate): Take the address of 'this' here. (build_over_call): And here. (build_new_method_call_1, build_op_call_1): Not here. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index f29e80db7c5..05c03f45d27 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -9615,7 +9615,10 @@ cp_parser_range_for (cp_parser *parser, tree scope, tree init, tree range_decl) range_expr = error_mark_node; stmt = begin_range_for_stmt (scope, init); finish_range_for_decl (stmt, range_decl, range_expr); - if (!type_dependent_expression_p (range_expr) + if (range_expr != error_mark_node + && !type_dependent_expression_p (range_expr) + /* The length of an array might be dependent. */ + && COMPLETE_TYPE_P (TREE_TYPE (range_expr)) /* do_auto_deduction doesn't mess with template init-lists. */ && !BRACE_ENCLOSED_INITIALIZER_P (range_expr)) do_range_for_auto_deduction (range_decl, range_expr); -- cgit v1.2.1