[clang] Skip re-building lambda expressions in parameters to consteval fns.
authorUtkarsh Saxena <usx@google.com>
Tue, 30 Aug 2022 14:57:07 +0000 (16:57 +0200)
committerTobias Hieta <tobias@hieta.se>
Thu, 8 Sep 2022 06:49:36 +0000 (08:49 +0200)
commit1c73596d345481de957e5ccc0bedf1fb9d9f643a
treede87d23680e69956fea0d1a4cb5011c482bb6b12
parent5e1ba27b9d494d26ea05d27a0f097ee99ea38e22
[clang] Skip re-building lambda expressions in parameters to consteval fns.

As discussed in this [comment](https://github.com/llvm/llvm-project/issues/56183#issuecomment-1224331699),
we end up building the lambda twice: once while parsing the function calls and then again while handling the immediate invocation.

This happens specially during removing nested immediate invocation.
Eg: When we have another consteval function as the parameter along with this lambda expression. Eg: `foo(bar([]{}))`, `foo(bar(), []{})`

While removing such nested immediate invocations, we should not rebuild this lambda. (IIUC, rebuilding a lambda would always generate a new type which will never match the original type from parsing)

Fixes: https://github.com/llvm/llvm-project/issues/56183
Fixes: https://github.com/llvm/llvm-project/issues/51695
Fixes: https://github.com/llvm/llvm-project/issues/50455
Fixes: https://github.com/llvm/llvm-project/issues/54872
Fixes: https://github.com/llvm/llvm-project/issues/54587
Differential Revision: https://reviews.llvm.org/D132945

(cherry picked from commit e7eec38246560781e0a4020b19c7eb038a8c5655)
clang/docs/ReleaseNotes.rst
clang/lib/Sema/SemaExpr.cpp
clang/test/SemaCXX/cxx2a-consteval.cpp