re PR c++/78693 (Bogus 'inconsistent deduction for ‘auto’' error when having a depend...
authorJakub Jelinek <jakub@redhat.com>
Wed, 4 Jan 2017 21:30:35 +0000 (22:30 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 4 Jan 2017 21:30:35 +0000 (22:30 +0100)
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
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/pr78693.C [new file with mode: 0644]

index 1fe0c37bfced00edb96d18849f5377c405b76775..833b9049ee44c1354f57d96c2d143cd764957b59 100644 (file)
@@ -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.
index 40e48f4e88061409a9ce0dec0512855db79dfe36..57ae064719524400def7fda23d9a2392691b994c 100644 (file)
@@ -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,
index fdd8aa156288b49a6d62ea1580e8ce26d37171a2..abdb8bb5a7eacb323a1e7306e80a21767cffdaed 100644 (file)
@@ -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 (file)
index 0000000..c937567
--- /dev/null
@@ -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);
+}