<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 - non-deterministic compile errors with constexpr and nonnull attribute"
   href="https://bugs.llvm.org/show_bug.cgi?id=43601">43601</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>non-deterministic compile errors with constexpr and nonnull attribute
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>new-bugs
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>9.0
          </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>enhancement
          </td>
        </tr>

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

        <tr>
          <th>Component</th>
          <td>new bugs
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>chris@detrino.org
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>htmldeveloper@gmail.com, llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>The following program when compiled with `clang++ -c test.cc` will fail to
compile around 50% of the time:

```
__attribute__((__nonnull__)) constexpr int bar(const char *, int) { return 0; }
int main() { constexpr int i = bar("foo", 12345); }
```

with the following error:

```
test.cc:2:28: error: constexpr variable 'i' must be initialized by a constant
expression
int main() { constexpr int i = bar("foo", 12345); }
                           ^   ~~~~~~~~~~~~~~~~~
test.cc:2:43: note: null passed to a callee that requires a non-null argument
int main() { constexpr int i = bar("foo", 12345); }
                                          ^
1 error generated.
```

This prevents using constexpr std::string_view::find from libstdc++ 9.2.0, the
following program has the same problem as the above reduced test case:

```
#include <string_view>

int main() { 
  constexpr std::string_view sv = "test";
  constexpr std::size_t sz = sv.find("blah", 1);
}
```

I was unable reproduce the problem without a second argument.</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>