<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Introduction of -fbracket-depth broke std::array:s longer than 256"
   href="https://bugs.llvm.org/show_bug.cgi?id=50178">50178</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Introduction of -fbracket-depth broke std::array:s longer than 256
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>C++
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>weiss@wsoptics.de
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>blitzrakete@gmail.com, dgregor@apple.com, erik.pilkington@gmail.com, llvm-bugs@lists.llvm.org, richard-llvm@metafoo.co.uk
          </td>
        </tr></table>
      <p>
        <div>
        <pre>The code at the bottom behaves like this with clang-12:

% clang++ -std=c++17 -c b.cpp
In file included from b.cpp:1:
/usr/lib/gcc/x86_64-pc-linux-gnu/10.3.0/include/g++-v10/array:245:52: fatal
error: instantiating fold expression with 257 arguments exceeded expression
nesting limit of 256
      -> array<enable_if_t<(is_same_v<_Tp, _Up> && ...), _Tp>,
                           ~~~~~~~~~~~~~~~~~~~~~~~~^~~~
b.cpp:6:12: note: while substituting deduced template arguments into function
template '<deduction guide for array>' [with _Tp = S, _Up = <S, S, S, S, S, S,
S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S>]
std::array a{S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{},
S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{},
S{}, S{}, S{}, S{},
           ^
1 error generated.

% clang++ -std=c++17 -c -fbracket-depth=512 b.cpp
% echo $?
0


This actually hit our production code and took me a while to reduce.  I think
limiting the length of std::array to <= 256 by default is not desirable.


This is the code:

#include<array>

struct S {};

std::array a{S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{},
S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{},
S{}, S{}, S{}, S{},
                     S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{},
S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{},
S{}, S{}, S{}, S{}, S{}, S{},
                     S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{},
S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{},
S{}, S{}, S{}, S{}, S{}, S{},
                     S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{},
S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{},
S{}, S{}, S{}, S{}, S{}, S{},
                     S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{},
S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{},
S{}, S{}, S{}, S{}, S{}, S{},
                     S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{},
S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{},
S{}, S{}, S{}, S{}, S{}, S{},
                     S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{},
S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{},
S{}, S{}, S{}, S{}, S{}, S{},
                     S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{},
S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{}, S{},
S{}};</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>