parser.c (cp_parser_decomposition_declaration): Replace decomposition declaration...
authorJakub Jelinek <jakub@redhat.com>
Tue, 4 Jul 2017 07:40:00 +0000 (09:40 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 4 Jul 2017 07:40:00 +0000 (09:40 +0200)
* parser.c (cp_parser_decomposition_declaration): Replace
decomposition declaration with structured binding in diagnostics.
* decl.c (cp_finish_decomp): Likewise.
(grokdeclarator): Likewise.

* g++.dg/cpp1z/decomp1.C: Expect structured binding instead of
decomposition declaration in diagnostics.
* g++.dg/cpp1z/decomp2.C: Likewise.
* g++.dg/cpp1z/decomp3.C: Likewise.
* g++.dg/cpp1z/decomp4.C: Likewise.
* g++.dg/cpp1z/decomp5.C: Likewise.
* g++.dg/cpp1z/decomp6.C: Likewise.
* g++.dg/cpp1z/decomp7.C: Likewise.
* g++.dg/cpp1z/decomp8.C: Likewise.
* g++.dg/cpp1z/decomp13.C: Likewise.
* g++.dg/cpp1z/decomp14.C: Likewise.
* g++.dg/cpp1z/decomp18.C: Likewise.
* g++.dg/cpp1z/decomp19.C: Likewise.
* g++.dg/cpp1z/decomp22.C: Likewise.
* g++.dg/cpp1z/decomp23.C: Likewise.
* g++.dg/cpp1z/decomp24.C: Likewise.
* g++.dg/cpp1z/decomp25.C: Likewise.
* g++.dg/cpp1z/decomp26.C: Likewise.
* g++.dg/cpp1z/decomp28.C: Likewise.

From-SVN: r249948

22 files changed:
gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp1z/decomp1.C
gcc/testsuite/g++.dg/cpp1z/decomp13.C
gcc/testsuite/g++.dg/cpp1z/decomp14.C
gcc/testsuite/g++.dg/cpp1z/decomp18.C
gcc/testsuite/g++.dg/cpp1z/decomp19.C
gcc/testsuite/g++.dg/cpp1z/decomp2.C
gcc/testsuite/g++.dg/cpp1z/decomp22.C
gcc/testsuite/g++.dg/cpp1z/decomp23.C
gcc/testsuite/g++.dg/cpp1z/decomp24.C
gcc/testsuite/g++.dg/cpp1z/decomp25.C
gcc/testsuite/g++.dg/cpp1z/decomp26.C
gcc/testsuite/g++.dg/cpp1z/decomp28.C
gcc/testsuite/g++.dg/cpp1z/decomp3.C
gcc/testsuite/g++.dg/cpp1z/decomp4.C
gcc/testsuite/g++.dg/cpp1z/decomp5.C
gcc/testsuite/g++.dg/cpp1z/decomp6.C
gcc/testsuite/g++.dg/cpp1z/decomp7.C
gcc/testsuite/g++.dg/cpp1z/decomp8.C

index 59a71da0546d5ee20f1e5266cc0e46c756bbe094..4dffee44f17f45e566df30b2e473c6cd84ea9b33 100644 (file)
@@ -1,5 +1,10 @@
 2017-07-04  Jakub Jelinek  <jakub@redhat.com>
 
+       * parser.c (cp_parser_decomposition_declaration): Replace
+       decomposition declaration with structured binding in diagnostics.
+       * decl.c (cp_finish_decomp): Likewise.
+       (grokdeclarator): Likewise.
+
        PR c++/81258
        * parser.c (cp_parser_decomposition_declaration): Diagnose invalid
        forms of structured binding initializers.
index d5b758a89ee87ab9a0a89bfa9d3a130a1d30c4c0..43a94d9f6eb62ed4ad014a0c9349b46ebaf4dbf8 100644 (file)
@@ -7486,8 +7486,8 @@ cp_finish_decomp (tree decl, tree first, unsigned int count)
 
          if (init == error_mark_node || eltype == error_mark_node)
            {
-             inform (dloc, "in initialization of decomposition variable %qD",
-                     v[i]);
+             inform (dloc, "in initialization of structured binding "
+                     "variable %qD", v[i]);
              goto error_out;
            }
          /* Save the decltype away before reference collapse.  */
@@ -10137,7 +10137,7 @@ grokdeclarator (const cp_declarator *declarator,
          break;
 
        case cdk_decomp:
-         name = "decomposition";
+         name = "structured binding";
          break;
 
        case cdk_error:
@@ -10591,43 +10591,43 @@ grokdeclarator (const cp_declarator *declarator,
                        ? declarator->declarator->id_loc : declarator->id_loc);
       if (inlinep)
        error_at (declspecs->locations[ds_inline],
-                 "decomposition declaration cannot be declared %<inline%>");
+                 "structured binding declaration cannot be %<inline%>");
       if (typedef_p)
        error_at (declspecs->locations[ds_typedef],
-                 "decomposition declaration cannot be declared %<typedef%>");
+                 "structured binding declaration cannot be %<typedef%>");
       if (constexpr_p)
-       error_at (declspecs->locations[ds_constexpr], "decomposition "
-                 "declaration cannot be declared %<constexpr%>");
+       error_at (declspecs->locations[ds_constexpr], "structured "
+                 "binding declaration cannot be %<constexpr%>");
       if (thread_p)
        error_at (declspecs->locations[ds_thread],
-                 "decomposition declaration cannot be declared %qs",
+                 "structured binding declaration cannot be %qs",
                  declspecs->gnu_thread_keyword_p
                  ? "__thread" : "thread_local");
       if (concept_p)
        error_at (declspecs->locations[ds_concept],
-                 "decomposition declaration cannot be declared %<concept%>");
+                 "structured binding declaration cannot be %<concept%>");
       switch (storage_class)
        {
        case sc_none:
          break;
        case sc_register:
-         error_at (loc, "decomposition declaration cannot be declared "
+         error_at (loc, "structured binding declaration cannot be "
                    "%<register%>");
          break;
        case sc_static:
-         error_at (loc, "decomposition declaration cannot be declared "
+         error_at (loc, "structured binding declaration cannot be "
                    "%<static%>");
          break;
        case sc_extern:
-         error_at (loc, "decomposition declaration cannot be declared "
+         error_at (loc, "structured binding declaration cannot be "
                    "%<extern%>");
          break;
        case sc_mutable:
-         error_at (loc, "decomposition declaration cannot be declared "
+         error_at (loc, "structured binding declaration cannot be "
                    "%<mutable%>");
          break;
        case sc_auto:
-         error_at (loc, "decomposition declaration cannot be declared "
+         error_at (loc, "structured binding declaration cannot be "
                    "C++98 %<auto%>");
          break;
        default:
@@ -10638,8 +10638,8 @@ grokdeclarator (const cp_declarator *declarator,
        {
          if (type != error_mark_node)
            {
-             error_at (loc, "decomposition declaration cannot be declared "
-                       "with type %qT", type);
+             error_at (loc, "structured binding declaration cannot have "
+                       "type %qT", type);
              inform (loc,
                      "type must be cv-qualified %<auto%> or reference to "
                      "cv-qualified %<auto%>");
index de87449283c48be0ccca6ca6956b40af750979b7..dbe0052792454c2e32edddb10d1b8b5d96409388 100644 (file)
@@ -13150,7 +13150,7 @@ cp_parser_decomposition_declaration (cp_parser *parser,
     }
 
   if (cxx_dialect < cxx1z)
-    pedwarn (loc, 0, "decomposition declaration only available with "
+    pedwarn (loc, 0, "structured bindings only available with "
                     "-std=c++1z or -std=gnu++1z");
 
   tree pushed_scope;
@@ -13199,7 +13199,7 @@ cp_parser_decomposition_declaration (cp_parser *parser,
 
   if (v.is_empty ())
     {
-      error_at (loc, "empty decomposition declaration");
+      error_at (loc, "empty structured binding declaration");
       decl = error_mark_node;
     }
 
index 7a2e1f0982d117400d748da4d09a29763546c80f..1293cb0ea6882ba0e8508a0ddabac24a485a0bc4 100644 (file)
@@ -1,5 +1,25 @@
 2017-07-04  Jakub Jelinek  <jakub@redhat.com>
 
+       * g++.dg/cpp1z/decomp1.C: Expect structured binding instead of
+       decomposition declaration in diagnostics.
+       * g++.dg/cpp1z/decomp2.C: Likewise.
+       * g++.dg/cpp1z/decomp3.C: Likewise.
+       * g++.dg/cpp1z/decomp4.C: Likewise.
+       * g++.dg/cpp1z/decomp5.C: Likewise.
+       * g++.dg/cpp1z/decomp6.C: Likewise.
+       * g++.dg/cpp1z/decomp7.C: Likewise.
+       * g++.dg/cpp1z/decomp8.C: Likewise.
+       * g++.dg/cpp1z/decomp13.C: Likewise.
+       * g++.dg/cpp1z/decomp14.C: Likewise.
+       * g++.dg/cpp1z/decomp18.C: Likewise.
+       * g++.dg/cpp1z/decomp19.C: Likewise.
+       * g++.dg/cpp1z/decomp22.C: Likewise.
+       * g++.dg/cpp1z/decomp23.C: Likewise.
+       * g++.dg/cpp1z/decomp24.C: Likewise.
+       * g++.dg/cpp1z/decomp25.C: Likewise.
+       * g++.dg/cpp1z/decomp26.C: Likewise.
+       * g++.dg/cpp1z/decomp28.C: Likewise.
+
        PR c++/81258
        * g++.dg/cpp1z/decomp21.C (foo): Adjust expected diagnostics.
        * g++.dg/cpp1z/decomp30.C: New test.
index 98f60905e1ad8018b845e7c91de4b4a693e50831..330689178634a3cd6127601f2739b100cf8fa298 100644 (file)
@@ -7,10 +7,10 @@ struct S { int a; signed char b; float c; } s = { 6, 7, 8.0f };
 int
 main ()
 {
-  auto & [ c, d ] = a;         // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
-  auto [ e, f ] = a;           // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
-  auto [ g, h, i ] = s;                // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
-  auto & [ j, k, l ] = s;      // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  auto & [ c, d ] = a;         // { dg-warning "structured bindings only available with" "" { target c++14_down } }
+  auto [ e, f ] = a;           // { dg-warning "structured bindings only available with" "" { target c++14_down } }
+  auto [ g, h, i ] = s;                // { dg-warning "structured bindings only available with" "" { target c++14_down } }
+  auto & [ j, k, l ] = s;      // { dg-warning "structured bindings only available with" "" { target c++14_down } }
   c++;
   d++;
   e += 6;
index 9ebddc6e6087a34a08b72d171a1fd78e90537084..a9bf264a2ca89671d2f4c5850cc8e793b0427735 100644 (file)
@@ -11,27 +11,27 @@ namespace std {
 template<> struct std::tuple_size<B> { static constexpr int value = 2; };
 template<int I> struct std::tuple_element<I,B> { typedef int type; };
 
-auto [ aa, bb, cc, dd ] = a;           // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+auto [ aa, bb, cc, dd ] = a;           // { dg-warning "structured bindings only available with" "" { target c++14_down } }
 // { dg-final { scan-assembler "_ZDC2aa2bb2cc2ddE" } }
-const auto & [ e, f, g, h ] = a;       // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+const auto & [ e, f, g, h ] = a;       // { dg-warning "structured bindings only available with" "" { target c++14_down } }
 // { dg-final { scan-assembler "_ZDC1e1f1g1hE" } }
-auto [ ee, ff ] = b;                   // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+auto [ ee, ff ] = b;                   // { dg-warning "structured bindings only available with" "" { target c++14_down } }
 // { dg-final { scan-assembler "_ZDC2ee2ffE" } }
-auto & [ gg, hh ] = b;                 // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+auto & [ gg, hh ] = b;                 // { dg-warning "structured bindings only available with" "" { target c++14_down } }
 // { dg-final { scan-assembler "_ZDC2gg2hhE" } }
 namespace N
 {
   namespace M
   {
-    auto [ i, j, k, l ] = a;           // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+    auto [ i, j, k, l ] = a;           // { dg-warning "structured bindings only available with" "" { target c++14_down } }
     // { dg-final { scan-assembler "_ZN1N1MDC1i1j1k1lEE" } }
-    auto & [ m, n, o, ppp ] = a;       // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+    auto & [ m, n, o, ppp ] = a;       // { dg-warning "structured bindings only available with" "" { target c++14_down } }
     // { dg-final { scan-assembler "_ZN1N1MDC1m1n1o3pppEE" } }
-    auto [ ii, jj ] = b;               // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+    auto [ ii, jj ] = b;               // { dg-warning "structured bindings only available with" "" { target c++14_down } }
     // { dg-final { scan-assembler "_ZN1N1MDC2ii2jjEE" } }
     // { dg-final { scan-assembler "_ZN1N1M2iiE" } }
     // { dg-final { scan-assembler "_ZN1N1M2jjE" } }
-    auto & [ mm, nn ] = b;             // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+    auto & [ mm, nn ] = b;             // { dg-warning "structured bindings only available with" "" { target c++14_down } }
     // { dg-final { scan-assembler "_ZN1N1MDC2mm2nnEE" } }
     // { dg-final { scan-assembler "_ZN1N1M2mmE" } }
     // { dg-final { scan-assembler "_ZN1N1M2nnE" } }
@@ -39,14 +39,14 @@ namespace N
 }
 namespace std
 {
-  auto [ i2, j2, k2, l2 ] = a;         // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  auto [ i2, j2, k2, l2 ] = a;         // { dg-warning "structured bindings only available with" "" { target c++14_down } }
   // { dg-final { scan-assembler "_ZStDC2i22j22k22l2E" } }
-  auto [ vv, ww ] = b;                 // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  auto [ vv, ww ] = b;                 // { dg-warning "structured bindings only available with" "" { target c++14_down } }
   // { dg-final { scan-assembler "_ZStDC2vv2wwE" } }
   // { dg-final { scan-assembler "_ZSt2vv" } }
   // { dg-final { scan-assembler "_ZSt2ww" } }
 }
 namespace
 {
-  auto [ v, w, x, y ] = a;             // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  auto [ v, w, x, y ] = a;             // { dg-warning "structured bindings only available with" "" { target c++14_down } }
 }
index 5d6d05fb8a457c970c459a414d900a06ac361f52..d05a8903232e028a92571968b7aa45cf231c6b82 100644 (file)
@@ -18,13 +18,13 @@ struct M : virtual J, L {};
 void
 foo (C &c, F &f, G &g, H &h, I &i, K &k, M &m)
 {
-  auto [ ci ] = c;             // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  auto [ ci ] = c;             // { dg-warning "structured bindings only available with" "" { target c++14_down } }
   auto [ fi ] = f;             // { dg-error "cannot decompose class type 'F': both it and its base class 'A' have non-static data members" }
-                               // { dg-warning "decomposition declaration only available with" "" { target c++14_down } .-1 }
+                               // { dg-warning "structured bindings only available with" "" { target c++14_down } .-1 }
   auto [ gi ] = g;             // { dg-error "cannot decompose class type 'G': its base classes 'A' and 'E' have non-static data members" }
-                               // { dg-warning "decomposition declaration only available with" "" { target c++14_down } .-1 }
-  auto [ hi ] = h;             // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+                               // { dg-warning "structured bindings only available with" "" { target c++14_down } .-1 }
+  auto [ hi ] = h;             // { dg-warning "structured bindings only available with" "" { target c++14_down } }
   auto [ ki ] = k;             // { dg-error "'B' is an ambiguous base of 'K'" }
-                               // { dg-warning "decomposition declaration only available with" "" { target c++14_down } .-1 }
-  auto [ mi ] = m;             // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+                               // { dg-warning "structured bindings only available with" "" { target c++14_down } .-1 }
+  auto [ mi ] = m;             // { dg-warning "structured bindings only available with" "" { target c++14_down } }
 }
index d5c68a26891ddd11e2a42cd598c7378a7b1af402..7799e462cdd4c0c768da0f59054f519efee197c7 100644 (file)
@@ -7,6 +7,6 @@ void
 foo ()
 {
   int z = 0;
-  for (auto & [ b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s ] : a)    // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  for (auto & [ b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s ] : a)    // { dg-warning "structured bindings only available with" "" { target c++14_down } }
     z += b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q + r + s;
 }
index e392e658e27a9cf970eca2eb1ac56afd9e6b88f9..e7d7abfce7c3ec848a5a66089e12a3d7db78a140 100644 (file)
@@ -8,6 +8,6 @@ main ()
   int x = 99;
   struct S { int &x; };
   S s{x};
-  auto [p] = s;                // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  auto [p] = s;                // { dg-warning "structured bindings only available with" "" { target c++14_down } }
   return p - 99;
 }
index 5831fc74940f112587eb6e3246b7dcd83ea34bf8..6574028217fa66818d897897475637ccd575addd 100644 (file)
@@ -9,12 +9,12 @@ __complex__ int c = 7 + 8i;
 int
 main ()
 {
-  auto & [ d, e, f, g ] = a;   // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
-  auto [ h, i, j, k ] = a;     // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
-  auto [ l, m ] = b;           // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
-  auto & [ n, o ] = b;         // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
-  auto & [ p, q ] = c;         // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
-  auto [ r, s ] = c;           // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  auto & [ d, e, f, g ] = a;   // { dg-warning "structured bindings only available with" "" { target c++14_down } }
+  auto [ h, i, j, k ] = a;     // { dg-warning "structured bindings only available with" "" { target c++14_down } }
+  auto [ l, m ] = b;           // { dg-warning "structured bindings only available with" "" { target c++14_down } }
+  auto & [ n, o ] = b;         // { dg-warning "structured bindings only available with" "" { target c++14_down } }
+  auto & [ p, q ] = c;         // { dg-warning "structured bindings only available with" "" { target c++14_down } }
+  auto [ r, s ] = c;           // { dg-warning "structured bindings only available with" "" { target c++14_down } }
   d += 10;
   e += 11;
   f += 12;
index 81d40c56931eafffa0104973f4220ede566e14ab..9e6b8df486a85cb6a2943a7660211af475c97b69 100644 (file)
@@ -16,6 +16,6 @@ int &&get (C<E...> &&);
 int
 foo (C<int> t)
 {
-  auto[x0] = t;        // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  auto[x0] = t;        // { dg-warning "structured bindings only available with" "" { target c++14_down } }
   return x0;
 }
index c682fa0026420e3eed3b3d2ce89c30a1220c673c..9e9278050c980015f1c7f23336bc0d335689d475 100644 (file)
@@ -7,6 +7,6 @@
 int
 foo (std::tuple<int> t)
 {
-  auto [x0] = t;       // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  auto [x0] = t;       // { dg-warning "structured bindings only available with" "" { target c++14_down } }
   return x0;
 }
index 0e874fa605512630bbb19e682f32be4371e99df4..4bd519791ff8091b758066399d894aa386f57379 100644 (file)
@@ -7,5 +7,5 @@ foo ()
 {
   int a {10};
   auto [b] { [&a](){} };       // { dg-error "cannot decompose lambda closure type" }
-  return b - a;                        // { dg-warning "decomposition declaration only available with" "" { target c++14_down } .-1 }
+  return b - a;                        // { dg-warning "structured bindings only available with" "" { target c++14_down } .-1 }
 }
index c99273613bcab1df702ed63a00ddd1f4862498f5..d90e665add0390bb7814f8583ea32f911bbbbd10 100644 (file)
@@ -7,9 +7,9 @@ struct S
 {
   enum E { A };
   void f () { auto [x] = 0; x++; }     // { dg-error "cannot decompose non-array non-class type" }
-                                       // { dg-warning "decomposition declaration only available with" "" { target c++14_down } .-1 }
+                                       // { dg-warning "structured bindings only available with" "" { target c++14_down } .-1 }
   void g (T t) { auto [y] = t; y++; }  // { dg-error "cannot decompose non-array non-class type" }
-};                                     // { dg-warning "decomposition declaration only available with" "" { target c++14_down } .-1 }
+};                                     // { dg-warning "structured bindings only available with" "" { target c++14_down } .-1 }
 
 int
 main ()
index f413920f545096a7b35f39abaf468dc67213cedb..035433385d7494203d8cb80fd2741dea4ae0184a 100644 (file)
@@ -2,5 +2,5 @@
 // { dg-do compile { target c++11 } }
 // { dg-options "" }
 
-template<typename T> T &make();        // { dg-warning "decomposition declaration only available with" "" { target c++14_down } .+1 }
+template<typename T> T &make();        // { dg-warning "structured bindings only available with" "" { target c++14_down } .+1 }
 auto [d1, d2] = make<int>();   // { dg-error "cannot decompose non-array non-class type" }
index 7561d9dfc02c695843f187375b080006b7636f0f..8b0b5a54999d546337782547c30a0f796efdc019 100644 (file)
@@ -15,14 +15,14 @@ template <int N>
 void
 foo (std::tuple<int> b)
 {
-  auto [c] = b;                // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  auto [c] = b;                // { dg-warning "structured bindings only available with" "" { target c++14_down } }
 }
 
 template <typename T>
 void
 bar (std::tuple<T> b)
 {
-  auto [c] = b;                // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  auto [c] = b;                // { dg-warning "structured bindings only available with" "" { target c++14_down } }
 }
 
 void
@@ -35,5 +35,5 @@ baz (std::tuple<int> b)
 int
 main ()
 {
-  [](auto) { [](std::tuple<int> b) { auto[c] = b; }; } (0); // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  [](auto) { [](std::tuple<int> b) { auto[c] = b; }; } (0); // { dg-warning "structured bindings only available with" "" { target c++14_down } }
 }
index a739d3ace375fd811f220a6c8b1e5f119df45e4e..58ce71bf6acdf42f7de9036a69cd9dd78148c8af 100644 (file)
@@ -9,36 +9,36 @@ B baz ();
 void
 test (A &b, B c)
 {
-  int && [ d ] = c;                    // { dg-error "decomposition declaration cannot be declared with type 'int'" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
-  char & [ e, f, ff ] { b };           // { dg-error "decomposition declaration cannot be declared with type 'char'" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
-  auto&[g,h,i]=b;                      // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } }
-  decltype (auto) [ j ] = c;           // { dg-error "decomposition declaration cannot be declared with type 'decltype.auto.'" "" { target c++14 } }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+  int && [ d ] = c;                    // { dg-error "structured binding declaration cannot have type 'int'" }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+  char & [ e, f, ff ] { b };           // { dg-error "structured binding declaration cannot have type 'char'" }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+  auto&[g,h,i]=b;                      // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } }
+  decltype (auto) [ j ] = c;           // { dg-error "structured binding declaration cannot have type 'decltype.auto.'" "" { target c++14 } }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
                                        // { dg-error "expected primary-expression before 'decltype'" "" { target c++11_down } .-2 }
   auto & & && & [ m, n, o ] = b;       // { dg-error "multiple ref-qualifiers" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
-  constexpr auto [ p ] = c;            // { dg-error "decomposition declaration cannot be declared 'constexpr'" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+  constexpr auto [ p ] = c;            // { dg-error "structured binding declaration cannot be 'constexpr'" }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
   friend auto [ q ] = c;               // { dg-error "'friend' used outside of class" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
-  typedef auto [ r ] = c;              // { dg-error "decomposition declaration cannot be declared 'typedef'" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
-  inline auto [ s ] = c;               // { dg-error "decomposition declaration cannot be declared 'inline'" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+  typedef auto [ r ] = c;              // { dg-error "structured binding declaration cannot be 'typedef'" }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+  inline auto [ s ] = c;               // { dg-error "structured binding declaration cannot be 'inline'" }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
   __restrict auto [ t ] = c;           // { dg-error "invalid use of 'restrict'" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
-  long long auto [ u ] = c;            // { dg-error "'long long' invalid for 'decomposition'" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+  long long auto [ u ] = c;            // { dg-error "'long long' invalid for 'structured binding'" }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
   virtual auto [ v ] = c;              // { dg-error "'virtual' outside class declaration" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
   explicit auto [ w ] = c;             // { dg-error "'explicit' outside class declaration" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
-  static auto [ x ] = c;               // { dg-error "decomposition declaration cannot be declared 'static'" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
-  extern auto [ y ] { c };             // { dg-error "decomposition declaration cannot be declared 'extern'" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+  static auto [ x ] = c;               // { dg-error "structured binding declaration cannot be 'static'" }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+  extern auto [ y ] { c };             // { dg-error "structured binding declaration cannot be 'extern'" }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
 }
 
 void
@@ -52,15 +52,15 @@ void
 test3 (A &b, B c)
 {
   auto [ d, e, f ] = arr;              // { dg-error "only 3 names provided while 'int .4.' decomposes into 4 elements" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
   auto & [ g, h, i, j, k ] = arr;      // { dg-error "5 names provided while 'int .4.' decomposes into 4 elements" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
   auto [ l, m ] = b;                   // { dg-error "only 2 names provided while 'A' decomposes into 3 elements" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
   auto & [ n, o, p, q ] = b;           // { dg-error "4 names provided while 'A' decomposes into 3 elements" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
-  auto [] { c };                       // { dg-error "empty decomposition declaration" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+  auto [] { c };                       // { dg-error "empty structured binding declaration" }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
   auto [ r, s ] = c;                   // { dg-error "2 names provided while 'B' decomposes into 1 elements" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
 }
index bc85263e98617800ac5f0dad54bebe1b71fbd9a2..55460833bd9231873d95039518fb28e16aaf3bcc 100644 (file)
@@ -15,18 +15,18 @@ void
 test (A &a, B &b, C &c, D &d, E &e, F &f, G &g, H &h, I &i)
 {
   auto [ j ] = a;                      // { dg-error "cannot decompose class type 'A' because it has an anonymous struct member" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
   auto [ k ] { b };                    // { dg-error "cannot decompose class type 'B' because it has an anonymous union member" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
   auto [ l, l2 ] = c;                  // { dg-error "cannot decompose non-public member 'C::b' of 'C'" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
-  auto [ m ] = d;                      // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+  auto [ m ] = d;                      // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } }
   auto [ n ] { e };                    // { dg-error "cannot decompose non-public member 'E::a' of 'E'" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
-  auto [ o ] { f };                    // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+  auto [ o ] { f };                    // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } }
   auto & [ p ] { g };                  // { dg-error "cannot decompose class type 'G': both it and its base class 'F' have non-static data members" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
-  auto [ q ] { h };                    // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+  auto [ q ] { h };                    // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } }
   auto [ r ] { i };                    // { dg-error "cannot decompose class type 'I': its base classes 'F' and 'H' have non-static data members" }
-                                       // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
+                                       // { dg-warning "structured bindings only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 }
 }
index 86b2c22f37a57bbbd81228305dc5fd5e374d9453..99610d76832b14cacceb82fec38bfe83fc1a689f 100644 (file)
@@ -12,19 +12,19 @@ main ()
       x.i = i;
       x.j = 2 * i++;
     }
-  for (auto & [ x, y ] : a)    // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  for (auto & [ x, y ] : a)    // { dg-warning "structured bindings only available with" "" { target c++14_down } }
     {
       x += 2;
       y += 3;
     }
   i = 0;
-  for (const auto [ u, v ] : a)        // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  for (const auto [ u, v ] : a)        // { dg-warning "structured bindings only available with" "" { target c++14_down } }
     {
       if (u != i + 2 || v != 2 * i++ + 3)
        __builtin_abort ();
     }
   i = 0;
-  for (auto [ x, y ] : a)      // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  for (auto [ x, y ] : a)      // { dg-warning "structured bindings only available with" "" { target c++14_down } }
     {
       x += 4;
       y += 5;
index 7a8a239d9e17c952be26c12a31121d0ae838c3c5..378a25141f407fcbc7f818388477589c8b2dcf36 100644 (file)
@@ -23,7 +23,7 @@ main ()
     if (ccnt != 6 || dcnt || cccnt || tccnt)
       __builtin_abort ();
     {
-      auto [b,c,d,e,f,g] = a;          // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+      auto [b,c,d,e,f,g] = a;          // { dg-warning "structured bindings only available with" "" { target c++14_down } }
       if (ccnt != 6 || dcnt || cccnt || tccnt != 6)
        __builtin_abort ();
       b.a++;
@@ -34,7 +34,7 @@ main ()
       if (&b == &a[0] || &c == &a[1] || &d == &a[2] || &e == &a[3] || &f == &a[4] || &g == &a[5])
        __builtin_abort ();
       {
-       auto&[ h, i, j, k, l, m ] = a;  // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+       auto&[ h, i, j, k, l, m ] = a;  // { dg-warning "structured bindings only available with" "" { target c++14_down } }
        if (ccnt != 6 || dcnt || cccnt || tccnt != 6)
          __builtin_abort ();
        j.a += 4;
@@ -59,7 +59,7 @@ main ()
     if (ccnt != 12 || dcnt != 12 || cccnt || tccnt != 6)
       __builtin_abort ();
     {
-      auto [b,c,d,e,f,g] { a };                // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+      auto [b,c,d,e,f,g] { a };                // { dg-warning "structured bindings only available with" "" { target c++14_down } }
       if (ccnt != 12 || dcnt != 12 || cccnt != 6 || tccnt != 6)
        __builtin_abort ();
       b.a++;
@@ -70,7 +70,7 @@ main ()
       if (&b == &a[0] || &c == &a[1] || &d == &a[2] || &e == &a[3] || &f == &a[4] || &g == &a[5])
        __builtin_abort ();
       {
-       auto&[ h, i, j, k, l, m ] {a};  // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+       auto&[ h, i, j, k, l, m ] {a};  // { dg-warning "structured bindings only available with" "" { target c++14_down } }
        if (ccnt != 12 || dcnt != 12 || cccnt != 6 || tccnt != 6)
          __builtin_abort ();
        j.a += 4;
@@ -95,7 +95,7 @@ main ()
     if (ccnt != 18 || dcnt != 24 || cccnt != 6 || tccnt != 6)
       __builtin_abort ();
     {
-      auto [b,c,d,e,f,g] ( a );                // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+      auto [b,c,d,e,f,g] ( a );                // { dg-warning "structured bindings only available with" "" { target c++14_down } }
       if (ccnt != 18 || dcnt != 24 || cccnt != 12 || tccnt != 6)
        __builtin_abort ();
       b.a++;
@@ -106,7 +106,7 @@ main ()
       if (&b == &a[0] || &c == &a[1] || &d == &a[2] || &e == &a[3] || &f == &a[4] || &g == &a[5])
        __builtin_abort ();
       {
-       auto&[ h, i, j, k, l, m ] (a);  // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+       auto&[ h, i, j, k, l, m ] (a);  // { dg-warning "structured bindings only available with" "" { target c++14_down } }
        if (ccnt != 18 || dcnt != 24 || cccnt != 12 || tccnt != 6)
          __builtin_abort ();
        j.a += 4;
index d366adecc4c6be376ddd8160d557c61599f23b64..545c5cf1060afed5e61b947864acad4a6907b2f9 100644 (file)
@@ -10,14 +10,14 @@ template <typename T, typename U>
 void
 foo (T &x, U &y)
 {
-  auto & [ c, d ] = a;         // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
-  auto [ e, f ] = a;           // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
-  auto [ g, h, i ] = sa;       // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
-  auto & [ j, k, l ] = sa;     // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
-  auto & [ m, n ] = x;         // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
-  auto [ o, p ] = x;           // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
-  auto [ q, r, s ] = y;                // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
-  auto & [ t, u, v ] = y;      // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  auto & [ c, d ] = a;         // { dg-warning "structured bindings only available with" "" { target c++14_down } }
+  auto [ e, f ] = a;           // { dg-warning "structured bindings only available with" "" { target c++14_down } }
+  auto [ g, h, i ] = sa;       // { dg-warning "structured bindings only available with" "" { target c++14_down } }
+  auto & [ j, k, l ] = sa;     // { dg-warning "structured bindings only available with" "" { target c++14_down } }
+  auto & [ m, n ] = x;         // { dg-warning "structured bindings only available with" "" { target c++14_down } }
+  auto [ o, p ] = x;           // { dg-warning "structured bindings only available with" "" { target c++14_down } }
+  auto [ q, r, s ] = y;                // { dg-warning "structured bindings only available with" "" { target c++14_down } }
+  auto & [ t, u, v ] = y;      // { dg-warning "structured bindings only available with" "" { target c++14_down } }
   c += 1;
   e += 2;
   g += 3;
index 9e1ea5d5da19c3980d7d7776e11ae836bf1eee27..af3075cce9850828fae3e6f6139f89de89b74604 100644 (file)
@@ -14,19 +14,19 @@ foo (T &b)
       x.i = i;
       x.j = 2 * i++;
     }
-  for (auto & [ x, y ] : a)    // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  for (auto & [ x, y ] : a)    // { dg-warning "structured bindings only available with" "" { target c++14_down } }
     {
       x += 2;
       y += 3;
     }
   i = 0;
-  for (const auto [ u, v ] : a)        // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  for (const auto [ u, v ] : a)        // { dg-warning "structured bindings only available with" "" { target c++14_down } }
     {
       if (u != i + 2 || v != 2 * i++ + 3)
        __builtin_abort ();
     }
   i = 0;
-  for (auto [ x, y ] : a)      // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  for (auto [ x, y ] : a)      // { dg-warning "structured bindings only available with" "" { target c++14_down } }
     {
       x += 4;
       y += 5;
@@ -45,19 +45,19 @@ foo (T &b)
       x.i = i;
       x.j = 2 * i++;
     }
-  for (auto & [ x, y ] : b)    // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  for (auto & [ x, y ] : b)    // { dg-warning "structured bindings only available with" "" { target c++14_down } }
     {
       x -= 2;
       y -= 3;
     }
   i = 0;
-  for (const auto [ u, v ] : b)        // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  for (const auto [ u, v ] : b)        // { dg-warning "structured bindings only available with" "" { target c++14_down } }
     {
       if (u != i - 2 || v != 2 * i++ - 3)
        __builtin_abort ();
     }
   i = 0;
-  for (auto [ x, y ] : b)      // { dg-warning "decomposition declaration only available with" "" { target c++14_down } }
+  for (auto [ x, y ] : b)      // { dg-warning "structured bindings only available with" "" { target c++14_down } }
     {
       x -= 4;
       y -= 5;