[llvm-bugs] [Bug 43601] New: non-deterministic compile errors with constexpr and nonnull attribute

via llvm-bugs llvm-bugs at lists.llvm.org
Tue Oct 8 00:28:41 PDT 2019


https://bugs.llvm.org/show_bug.cgi?id=43601

            Bug ID: 43601
           Summary: non-deterministic compile errors with constexpr and
                    nonnull attribute
           Product: new-bugs
           Version: 9.0
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: new bugs
          Assignee: unassignedbugs at nondot.org
          Reporter: chris at detrino.org
                CC: htmldeveloper at gmail.com, llvm-bugs at lists.llvm.org

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.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20191008/e988e7f6/attachment.html>


More information about the llvm-bugs mailing list