llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Qizhi Hu (jcsxky) <details> <summary>Changes</summary> Try to fix [issue](https://github.com/llvm/llvm-project/issues/78542) by creating a new `FunctionTypeDepthState` and pop it after finish. --- Full diff: https://github.com/llvm/llvm-project/pull/78896.diff 2 Files Affected: - (modified) clang/lib/AST/ItaniumMangle.cpp (+2) - (added) clang/test/AST/mangle-lambda-expression-no-crash.cpp (+5) ``````````diff diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp index b1678479888eb77..20f1ec969155a8b 100644 --- a/clang/lib/AST/ItaniumMangle.cpp +++ b/clang/lib/AST/ItaniumMangle.cpp @@ -2128,6 +2128,7 @@ void CXXNameMangler::mangleLambda(const CXXRecordDecl *Lambda) { } void CXXNameMangler::mangleLambdaSig(const CXXRecordDecl *Lambda) { + FunctionTypeDepthState saved = FunctionTypeDepth.push(); // Proposed on https://github.com/itanium-cxx-abi/cxx-abi/issues/31. for (auto *D : Lambda->getLambdaExplicitTemplateParameters()) mangleTemplateParamDecl(D); @@ -2140,6 +2141,7 @@ void CXXNameMangler::mangleLambdaSig(const CXXRecordDecl *Lambda) { Lambda->getLambdaTypeInfo()->getType()->castAs<FunctionProtoType>(); mangleBareFunctionType(Proto, /*MangleReturnType=*/false, Lambda->getLambdaStaticInvoker()); + FunctionTypeDepth.pop(saved); } void CXXNameMangler::manglePrefix(NestedNameSpecifier *qualifier) { diff --git a/clang/test/AST/mangle-lambda-expression-no-crash.cpp b/clang/test/AST/mangle-lambda-expression-no-crash.cpp new file mode 100644 index 000000000000000..8727e99b9bf64dd --- /dev/null +++ b/clang/test/AST/mangle-lambda-expression-no-crash.cpp @@ -0,0 +1,5 @@ +// RUN: %clang_cc1 -fsyntax-only -std=c++17 -verify %s +// RUN: %clang_cc1 -fsyntax-only -std=c++20 -verify %s +// expected-no-diagnostics + +auto ICE = [](auto a) { return [=]<decltype(a) b>() { return 1; }; }; `````````` </details> https://github.com/llvm/llvm-project/pull/78896 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits