From: Jakub Jelinek Date: Wed, 4 Jan 2017 21:30:35 +0000 (+0100) Subject: re PR c++/78693 (Bogus 'inconsistent deduction for ‘auto’' error when having a depend... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=26c43e27441b88b20a463686ffe0b9b5ebbfbcf0;p=gcc.git re PR c++/78693 (Bogus 'inconsistent deduction for ‘auto’' error when having a dependent initializer and a nondependent one in the same declaration) PR c++/78693 * parser.c (cp_parser_simple_declaration): Only complain about inconsistent auto deduction if auto_result doesn't use auto. * g++.dg/cpp0x/pr78693.C: New test. From-SVN: r244074 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1fe0c37bfce..833b9049ee4 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2017-01-04 Jakub Jelinek + PR c++/78693 + * parser.c (cp_parser_simple_declaration): Only complain about + inconsistent auto deduction if auto_result doesn't use auto. + * parser.c (cp_parser_simple_declaration): Diagnose function declaration among more than one init-declarators with auto specifier. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 40e48f4e880..57ae0647195 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -12799,9 +12799,11 @@ cp_parser_simple_declaration (cp_parser* parser, } } - if (auto_result) + if (auto_result + && (!processing_template_decl || !type_uses_auto (auto_result))) { - if (last_type && last_type != error_mark_node + if (last_type + && last_type != error_mark_node && !same_type_p (auto_result, last_type)) { /* If the list of declarators contains more than one declarator, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fdd8aa15628..abdb8bb5a7e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2017-01-04 Jakub Jelinek + PR c++/78693 + * g++.dg/cpp0x/pr78693.C: New test. + PR driver/78957 * gcc.dg/pr78957.c: New test. diff --git a/gcc/testsuite/g++.dg/cpp0x/pr78693.C b/gcc/testsuite/g++.dg/cpp0x/pr78693.C new file mode 100644 index 00000000000..c937567e3f3 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/pr78693.C @@ -0,0 +1,31 @@ +// PR c++/78693 +// { dg-do compile { target c++11 } } + +template +void +foo (T t) +{ + auto i = t, j = 1; // { dg-bogus "inconsistent deduction" } +} + +template +void +bar (T t) +{ + auto i = 1, j = t, k = 2; // { dg-bogus "inconsistent deduction" } +} + +template +void +foo (T t, U u) +{ + auto i = t, j = u; // { dg-bogus "inconsistent deduction" } +} + +void +foo () +{ + foo (0); + bar (0); + foo (1, 2); +}