cor3ntin added a comment.

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


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