aaron.ballman added a comment.

In D111400#3246323 <https://reviews.llvm.org/D111400#3246323>, @cor3ntin wrote:

> In D111400#3243826 <https://reviews.llvm.org/D111400#3243826>, @aaron.ballman 
> wrote:
>
>> In D111400#3172097 <https://reviews.llvm.org/D111400#3172097>, @cor3ntin 
>> wrote:
>>
>>> Regression compared to the status quo:
>>> This code no longer warns (as noted by Hubert above)
>>>
>>>   auto f = [](bool b) {
>>>     if (b) return 42;
>>>     static int x = 0;
>>>     return x;
>>>   };
>>>   constexpr int x = f(true);
>>>   const int *p = &x;
>>>
>>> GCC doesn't warn and... if we wanted to produce a warning there, I have no 
>>> idea how to go about it.
>>
>> I think I found the issue in the code, but one thing that's strange is that 
>> we don't seem to treat it as an extension but instead issue an error, but 
>> the behavior is consistent with other things we handle as an extension there 
>> (e.g., a local variable in C++14 mode).
>
> Yes, that was a bug, but the code above cannot be diagnose.
> at the time when the lambda f() is parsed, there is no indication that it 
> must be usable in a constexpr context, and so the compiler doesn't emit a 
> diagnostic.
> It does when the call operator is marked explicitly `constexpr`
>
>   auto f = [] (bool b) constexpr {
>     if (b) return 42;
>     static int x = 0;
>     return x;
>   };
>   constexpr int x = f(true);
>   const int *p = &x;
>
> This behavior is identical to GCC's https://compiler-explorer.com/z/xor3oYGMa

Agreed -- if the lambda function doesn't satisfy the requirements for a 
constexpr function, then its function call operator is not marked as constexpr, 
but that only gets diagnosed once the function is used in a constexpr context.

@hubert.reinterpretcast -- how does this patch look to you now?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D111400/new/

https://reviews.llvm.org/D111400

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to