diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-01-04 22:30:35 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-01-04 22:30:35 +0100 |
commit | 26c43e27441b88b20a463686ffe0b9b5ebbfbcf0 (patch) | |
tree | 3e4534773f68a3b8acb7baadbc4a5f321c830e48 | |
parent | 742b18041a2624da73d57abfaa44b04fbe55fe37 (diff) | |
download | gcc-26c43e27441b88b20a463686ffe0b9b5ebbfbcf0.zip gcc-26c43e27441b88b20a463686ffe0b9b5ebbfbcf0.tar.gz gcc-26c43e27441b88b20a463686ffe0b9b5ebbfbcf0.tar.bz2 |
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
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/parser.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/pr78693.C | 31 |
4 files changed, 42 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1fe0c37..833b904 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2017-01-04 Jakub Jelinek <jakub@redhat.com> + 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 40e48f4..57ae064 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 fdd8aa1..abdb8bb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2017-01-04 Jakub Jelinek <jakub@redhat.com> + 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 0000000..c937567 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/pr78693.C @@ -0,0 +1,31 @@ +// PR c++/78693 +// { dg-do compile { target c++11 } } + +template <class T> +void +foo (T t) +{ + auto i = t, j = 1; // { dg-bogus "inconsistent deduction" } +} + +template <class T> +void +bar (T t) +{ + auto i = 1, j = t, k = 2; // { dg-bogus "inconsistent deduction" } +} + +template <class T, class U> +void +foo (T t, U u) +{ + auto i = t, j = u; // { dg-bogus "inconsistent deduction" } +} + +void +foo () +{ + foo (0); + bar (0); + foo (1, 2); +} |