PR c++/63149 - wrong auto deduction from braced-init-list
authorNina Dinka Ranns <dinka.ranns@gmail.com>
Wed, 5 Jun 2019 18:11:20 +0000 (14:11 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 5 Jun 2019 18:11:20 +0000 (14:11 -0400)
2019-06-04  Nina Dinka Ranns  <dinka.ranns@gmail.com>

    gcc/cp/
    * pt.c (listify_autos): Use non cv qualified auto_node in
    std::initializer_list<auto>.

    testsuite/
    * g++.dg/cpp0x/initlist-deduce2.C: New test.

From-SVN: r271968

gcc/cp/pt.c
gcc/testsuite/g++.dg/cpp0x/initlist-deduce2.C [new file with mode: 0644]

index cfbd9fd4c888dd287e380651cd72507024df26f4..d2cf3458253a2760fc4eb35136c99e9d8abf50f1 100644 (file)
@@ -26836,7 +26836,7 @@ listify (tree arg)
 static tree
 listify_autos (tree type, tree auto_node)
 {
-  tree init_auto = listify (auto_node);
+  tree init_auto = listify (strip_top_quals (auto_node));
   tree argvec = make_tree_vec (1);
   TREE_VEC_ELT (argvec, 0) = init_auto;
   if (processing_template_decl)
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-deduce2.C b/gcc/testsuite/g++.dg/cpp0x/initlist-deduce2.C
new file mode 100644 (file)
index 0000000..dbf68a4
--- /dev/null
@@ -0,0 +1,8 @@
+// Test for PR63149
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+const auto r = { 1, 2, 3 };
+using X = decltype(r);
+using X = const std::initializer_list<int>;