Author: Haojian Wu Date: 2020-08-19T09:05:12+02:00 New Revision: 5b797eb5b4db1e5695f314b916ab3a79f3eda1e6
URL: https://github.com/llvm/llvm-project/commit/5b797eb5b4db1e5695f314b916ab3a79f3eda1e6 DIFF: https://github.com/llvm/llvm-project/commit/5b797eb5b4db1e5695f314b916ab3a79f3eda1e6.diff LOG: [AST] Fix a crash on mangling a binding decl from a DeclRefExpr. Differential Revision: https://reviews.llvm.org/D86130 Added: Modified: clang/lib/AST/ItaniumMangle.cpp clang/test/CodeGenCXX/mangle.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp index 2b207c17d939..6564e62813db 100644 --- a/clang/lib/AST/ItaniumMangle.cpp +++ b/clang/lib/AST/ItaniumMangle.cpp @@ -657,6 +657,8 @@ void CXXNameMangler::mangle(GlobalDecl GD) { mangleName(FD); else if (const MSGuidDecl *GuidD = dyn_cast<MSGuidDecl>(GD.getDecl())) mangleName(GuidD); + else if (const BindingDecl *BD = dyn_cast<BindingDecl>(GD.getDecl())) + mangleName(BD); else llvm_unreachable("unexpected kind of global decl"); } diff --git a/clang/test/CodeGenCXX/mangle.cpp b/clang/test/CodeGenCXX/mangle.cpp index 46f12b2d1b52..95bf5a9fcbde 100644 --- a/clang/test/CodeGenCXX/mangle.cpp +++ b/clang/test/CodeGenCXX/mangle.cpp @@ -1138,3 +1138,20 @@ namespace test58 { // CHECK-LABEL: @_ZN6test581AC1INS_5StateEEET_MNS_8identityIS3_E4typeEFbvE void fn1() { A(a, &State::m_fn1); } } + +namespace test59 { + // verify no crash. + template<typename T> + void f(T g) { + auto [e] = g; + [](decltype(e)) {}; + } +} + +namespace test60 { + struct X { int i, j; }; + auto [a,b] = X{1,2}; + template<typename T> void f(decltype(a + T())) {} + // CHECK-LABEL: @_ZN6test601fIiEEvDTplL_ZNS_1aEEcvT__EE + template void f<int>(int); +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits