aalmkainzi wrote:

Something to note is, when initializing with initializer list, the error 
message is different:
```
error: constexpr variable 'bar1' must be initialized by a constant expression
    7 | constexpr foo bar1 = (foo){.a = &b};
      |               ^      ~~~~~~~~~~~~~~
error: constexpr pointer initializer is not null
    8 | constexpr foo bar2 = {.a = &b};
      |                            ^
2 errors generated.
```
This is because it's happening in here:
https://github.com/llvm/llvm-project/blob/a49dfca4e6f10c7044e03975f1f3f462864b74ca/clang/lib/Sema/SemaInit.cpp#L8582-L8588

This is reached only if the initializer is an initializer list.

My first attempt was to edit that place to also trigger for any assignment, not 
just initializer list, but that was more complicated than I expected.

The check I added instead is a bit hacky, but works.

The check in `SemaInit.cpp` can actually be deleted now, and the error messages 
become the same:
```
error: constexpr variable 'bar1' must be initialized by a constant expression
    7 | constexpr foo bar1 = (foo){.a = &b};
      |               ^      ~~~~~~~~~~~~~~
error: constexpr variable 'bar2' must be initialized by a constant expression
    8 | constexpr foo bar2 = {.a = &b};
      |               ^      ~~~~~~~~~
2 errors generated.
```
But I didn't do that to not change existing error messages.

https://github.com/llvm/llvm-project/pull/228776
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to