From 26c43e27441b88b20a463686ffe0b9b5ebbfbcf0 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 4 Jan 2017 22:30:35 +0100 Subject: [PATCH] =?utf8?q?re=20PR=20c++/78693=20(Bogus=20'inconsistent=20d?= =?utf8?q?eduction=20for=20=E2=80=98auto=E2=80=99'=20error=20when=20having?= =?utf8?q?=20a=20dependent=20initializer=20and=20a=20nondependent=20one=20?= =?utf8?q?in=20the=20same=20declaration)?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/parser.c | 6 ++++-- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/cpp0x/pr78693.C | 31 ++++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/pr78693.C 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); +} -- 2.30.2