[clang] ea4fd66 - [clang] fix crash on generic lambda with lambda in decltype
via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 20 01:30:43 PST 2023
Author: v1nh1shungry
Date: 2023-01-20T17:11:07+08:00
New Revision: ea4fd668c2cd88d13b36a5d64e3dedb1106340bc
URL: https://github.com/llvm/llvm-project/commit/ea4fd668c2cd88d13b36a5d64e3dedb1106340bc
DIFF: https://github.com/llvm/llvm-project/commit/ea4fd668c2cd88d13b36a5d64e3dedb1106340bc.diff
LOG: [clang] fix crash on generic lambda with lambda in decltype
Relevant issue: https://github.com/llvm/llvm-project/issues/59771
During the instantiation of a generic lambda, a non-generic lambda in
the trailing `decltype` is a `DeclContext` but not a dependent context,
so we shouldn't call `PerformDependentDiagnostics` on it.
Differential Revision: https://reviews.llvm.org/D140838
Added:
Modified:
clang/lib/Sema/SemaTemplateInstantiate.cpp
clang/test/SemaCXX/lambda-unevaluated.cpp
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaTemplateInstantiate.cpp b/clang/lib/Sema/SemaTemplateInstantiate.cpp
index 89502937cc30b..2790e78aa53a3 100644
--- a/clang/lib/Sema/SemaTemplateInstantiate.cpp
+++ b/clang/lib/Sema/SemaTemplateInstantiate.cpp
@@ -1231,7 +1231,7 @@ namespace {
// We recreated a local declaration, but not by instantiating it. There
// may be pending dependent diagnostics to produce.
- if (auto *DC = dyn_cast<DeclContext>(Old))
+ if (auto *DC = dyn_cast<DeclContext>(Old); DC && DC->isDependentContext())
SemaRef.PerformDependentDiagnostics(DC, TemplateArgs);
}
diff --git a/clang/test/SemaCXX/lambda-unevaluated.cpp b/clang/test/SemaCXX/lambda-unevaluated.cpp
index 6d8c3b88c2eaf..da00cb48a87fd 100644
--- a/clang/test/SemaCXX/lambda-unevaluated.cpp
+++ b/clang/test/SemaCXX/lambda-unevaluated.cpp
@@ -142,3 +142,7 @@ using c = decltype([]() static noexcept(noexcept([] { return 0; }())) { return 0
using d = decltype(sizeof([] static { return 0; }));
}
+
+namespace lambda_in_trailing_decltype {
+auto x = ([](auto) -> decltype([] {}()) {}(0), 2);
+}
More information about the cfe-commits
mailing list