hokein updated this revision to Diff 286488. hokein added a comment. add one more test.
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D86130/new/ https://reviews.llvm.org/D86130 Files: clang/lib/AST/ItaniumMangle.cpp clang/test/CodeGenCXX/mangle.cpp Index: clang/test/CodeGenCXX/mangle.cpp =================================================================== --- clang/test/CodeGenCXX/mangle.cpp +++ clang/test/CodeGenCXX/mangle.cpp @@ -1138,3 +1138,20 @@ // 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); +} Index: clang/lib/AST/ItaniumMangle.cpp =================================================================== --- clang/lib/AST/ItaniumMangle.cpp +++ clang/lib/AST/ItaniumMangle.cpp @@ -657,6 +657,8 @@ 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"); }
Index: clang/test/CodeGenCXX/mangle.cpp =================================================================== --- clang/test/CodeGenCXX/mangle.cpp +++ clang/test/CodeGenCXX/mangle.cpp @@ -1138,3 +1138,20 @@ // 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); +} Index: clang/lib/AST/ItaniumMangle.cpp =================================================================== --- clang/lib/AST/ItaniumMangle.cpp +++ clang/lib/AST/ItaniumMangle.cpp @@ -657,6 +657,8 @@ 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"); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits