Author: Amy Huang Date: 2021-01-28T16:41:26-08:00 New Revision: 9b21d4b9434d2d4796b0d60d64f6ded9bac95441
URL: https://github.com/llvm/llvm-project/commit/9b21d4b9434d2d4796b0d60d64f6ded9bac95441 DIFF: https://github.com/llvm/llvm-project/commit/9b21d4b9434d2d4796b0d60d64f6ded9bac95441.diff LOG: Revert "[DebugInfo][CodeView] Use <lambda_n> as the display name for lambdas." for test failures. This reverts commit d73564c510036b2d4f5858effdcd23fe54fc1063. Added: Modified: clang/include/clang/AST/Mangle.h clang/lib/AST/ItaniumMangle.cpp clang/lib/AST/MicrosoftMangle.cpp clang/lib/CodeGen/CGDebugInfo.cpp clang/test/CodeGenCXX/debug-info-codeview-unnamed.cpp clang/test/CodeGenCXX/debug-info-gline-tables-only-codeview.cpp Removed: ################################################################################ diff --git a/clang/include/clang/AST/Mangle.h b/clang/include/clang/AST/Mangle.h index f8f44853567f..0e8d6dd53d8a 100644 --- a/clang/include/clang/AST/Mangle.h +++ b/clang/include/clang/AST/Mangle.h @@ -89,17 +89,6 @@ class MangleContext { return Result.first->second; } - uint64_t getAnonymousStructIdForDebugInfo(const NamedDecl *D) { - llvm::DenseMap<const NamedDecl *, uint64_t>::iterator Result = - AnonStructIds.find(D); - // The decl should already be inserted, but return 0 in case it is not. - if (Result == AnonStructIds.end()) - return 0; - return Result->second; - } - - virtual StringRef getLambdaString(const CXXRecordDecl *Lambda) = 0; - /// @name Mangler Entry Points /// @{ diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp index 265c2172801c..4420f6a2c1c3 100644 --- a/clang/lib/AST/ItaniumMangle.cpp +++ b/clang/lib/AST/ItaniumMangle.cpp @@ -203,36 +203,6 @@ class ItaniumMangleContextImpl : public ItaniumMangleContext { disc = discriminator-2; return true; } - - StringRef getLambdaString(const CXXRecordDecl *Lambda) override { - // This function matches the one in MicrosoftMangle, which returns - // the string that is used in lambda mangled names. - assert(Lambda->isLambda() && "RD must be a lambda!"); - llvm::SmallString<10> Name("<lambda"); - Decl *LambdaContextDecl = Lambda->getLambdaContextDecl(); - unsigned LambdaManglingNumber = Lambda->getLambdaManglingNumber(); - unsigned LambdaId; - const ParmVarDecl *Parm = dyn_cast_or_null<ParmVarDecl>(LambdaContextDecl); - const FunctionDecl *Func = - Parm ? dyn_cast<FunctionDecl>(Parm->getDeclContext()) : nullptr; - - if (Func) { - unsigned DefaultArgNo = - Func->getNumParams() - Parm->getFunctionScopeIndex(); - Name += llvm::utostr(DefaultArgNo); - Name += "_"; - } - - if (LambdaManglingNumber) - LambdaId = LambdaManglingNumber; - else - LambdaId = getAnonymousStructIdForDebugInfo(Lambda); - - Name += llvm::utostr(LambdaId); - Name += '>'; - return StringRef(Name); - } - /// @} }; diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp index aaaba62a0fd4..9eac3586c871 100644 --- a/clang/lib/AST/MicrosoftMangle.cpp +++ b/clang/lib/AST/MicrosoftMangle.cpp @@ -228,34 +228,6 @@ class MicrosoftMangleContextImpl : public MicrosoftMangleContext { return true; } - StringRef getLambdaString(const CXXRecordDecl *Lambda) override { - assert(Lambda->isLambda() && "RD must be a lambda!"); - llvm::SmallString<10> Name("<lambda_"); - - Decl *LambdaContextDecl = Lambda->getLambdaContextDecl(); - unsigned LambdaManglingNumber = Lambda->getLambdaManglingNumber(); - unsigned LambdaId; - const ParmVarDecl *Parm = dyn_cast_or_null<ParmVarDecl>(LambdaContextDecl); - const FunctionDecl *Func = - Parm ? dyn_cast<FunctionDecl>(Parm->getDeclContext()) : nullptr; - - if (Func) { - unsigned DefaultArgNo = - Func->getNumParams() - Parm->getFunctionScopeIndex(); - Name += llvm::utostr(DefaultArgNo); - Name += "_"; - } - - if (LambdaManglingNumber) - LambdaId = LambdaManglingNumber; - else - LambdaId = getLambdaIdForDebugInfo(Lambda); - - Name += llvm::utostr(LambdaId); - Name += ">"; - return StringRef(Name); - } - unsigned getLambdaId(const CXXRecordDecl *RD) { assert(RD->isLambda() && "RD must be a lambda!"); assert(!RD->isExternallyVisible() && "RD must not be visible!"); @@ -266,19 +238,6 @@ class MicrosoftMangleContextImpl : public MicrosoftMangleContext { return Result.first->second; } - unsigned getLambdaIdForDebugInfo(const CXXRecordDecl *RD) { - assert(RD->isLambda() && "RD must be a lambda!"); - assert(!RD->isExternallyVisible() && "RD must not be visible!"); - assert(RD->getLambdaManglingNumber() == 0 && - "RD must not have a mangling number!"); - llvm::DenseMap<const CXXRecordDecl *, unsigned>::iterator Result = - LambdaIds.find(RD); - // The lambda should exist, but return 0 in case it doesn't. - if (Result == LambdaIds.end()) - return 0; - return Result->second; - } - /// Return a character sequence that is (somewhat) unique to the TU suitable /// for mangling anonymous namespaces. StringRef getAnonymousNamespaceHash() const { diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index fb1d465fca4e..99944afaad14 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -317,9 +317,8 @@ StringRef CGDebugInfo::getClassName(const RecordDecl *RD) { if (const IdentifierInfo *II = RD->getIdentifier()) return II->getName(); - // The CodeView printer in LLVM wants to see the names of unnamed types - // because they need to have a unique identifier. - // These names are used to reconstruct the fully qualified type names. + // The CodeView printer in LLVM wants to see the names of unnamed types: it is + // used to reconstruct the fully qualified type names. if (CGM.getCodeGenOpts().EmitCodeView) { if (const TypedefNameDecl *D = RD->getTypedefNameForAnonDecl()) { assert(RD->getDeclContext() == D->getDeclContext() && @@ -343,14 +342,6 @@ StringRef CGDebugInfo::getClassName(const RecordDecl *RD) { // associate typedef mangled in if they have one. Name = TND->getName(); - // Give lambdas a display name based on their name mangling. - if (const CXXRecordDecl *CXXRD = dyn_cast<CXXRecordDecl>(RD)) - if (CXXRD->isLambda()) { - StringRef LambdaName = - CGM.getCXXABI().getMangleContext().getLambdaString(CXXRD); - return internString(LambdaName); - } - if (!Name.empty()) { SmallString<256> UnnamedType("<unnamed-type-"); UnnamedType += Name; diff --git a/clang/test/CodeGenCXX/debug-info-codeview-unnamed.cpp b/clang/test/CodeGenCXX/debug-info-codeview-unnamed.cpp index b4c79936ab33..dd4cc9cb4787 100644 --- a/clang/test/CodeGenCXX/debug-info-codeview-unnamed.cpp +++ b/clang/test/CodeGenCXX/debug-info-codeview-unnamed.cpp @@ -100,7 +100,7 @@ int main(int argc, char* argv[], char* arge[]) { // MSVC-SAME: ) // MSVC: [[TYPE_OF_FOUR]] = distinct !DICompositeType // MSVC-SAME: tag: DW_TAG_class_type - // MSVC-SAME: name: "<lambda_0>" + // MSVC-NOT: name: // MSVC-SAME: identifier: ".?AV<lambda_0>@?0??main@@9@" // MSVC-SAME: ) diff --git a/clang/test/CodeGenCXX/debug-info-gline-tables-only-codeview.cpp b/clang/test/CodeGenCXX/debug-info-gline-tables-only-codeview.cpp index e3ca6bf8a187..409b62da62c1 100644 --- a/clang/test/CodeGenCXX/debug-info-gline-tables-only-codeview.cpp +++ b/clang/test/CodeGenCXX/debug-info-gline-tables-only-codeview.cpp @@ -1,26 +1,17 @@ -// RUN: %clang_cc1 %s -gcodeview -debug-info-kind=line-tables-only -emit-llvm \ -// RUN: -o - | FileCheck %s +// RUN: %clang_cc1 %s -gcodeview -debug-info-kind=line-tables-only -S \ +// RUN: -emit-llvm -o - | FileCheck %s // Checks that clang with "-gline-tables-only" with CodeView emits some debug // info for variables and types when they appear in function scopes. namespace NS { struct C { void m() {} - // Test externally visible lambda. - void lambda2() { []() {}(); } - - // Test naming for function parameters. - void lambda_params(int x = [](){ return 0; }(), int y = [](){ return 1; }()) {} }; void f() {} } -// Test non- externally visible lambda. -auto lambda1 = []() { return 1; }; - NS::C c; - void test() { // CHECK: !DISubprogram(name: "f", scope: ![[NS:[0-9]+]], // CHECK-SAME: type: ![[F:[0-9]+]] @@ -30,30 +21,10 @@ void test() { NS::f(); // CHECK: ![[M:[0-9]+]] = distinct !DISubprogram(name: "m", scope: ![[C:[0-9]+]], - // CHECK-SAME: type: ![[MTYPE:[0-9]+]], + // CHECK-SAME: type: ![[MTYPE:[0-9]+]] // CHECK: ![[C]] = !DICompositeType(tag: DW_TAG_structure_type, name: "C", // CHECK-SAME: flags: DIFlagFwdDecl // CHECK-NOT: identifier // CHECK: ![[MTYPE]] = !DISubroutineType({{.*}}types: !{{.*}}) c.m(); - - // CHECK: !DISubprogram(name: "operator()", scope: ![[LAMBDA0:[0-9]+]], - // CHECK: ![[LAMBDA0]] = !DICompositeType(tag: DW_TAG_class_type, - // CHECK-SAME: name: "<lambda_0>", - // CHECK-SAME: flags: DIFlagFwdDecl - lambda1(); - - // CHECK: !DISubprogram(name: "operator()", scope: ![[LAMBDA1_1:[0-9]+]], - // CHECK: ![[LAMBDA1_1]] = !DICompositeType(tag: DW_TAG_class_type, - // CHECK-SAME: name: "<lambda_1_1>", - // CHECK: !DISubprogram(name: "operator()", scope: ![[LAMBDA2_1:[0-9]+]], - // CHECK: ![[LAMBDA2_1]] = !DICompositeType(tag: DW_TAG_class_type, - // CHECK-SAME: name: "<lambda_2_1>", - c.lambda_params(); - - // CHECK: !DISubprogram(name: "operator()", scope: ![[LAMBDA1:[0-9]+]], - // CHECK: ![[LAMBDA1]] = !DICompositeType(tag: DW_TAG_class_type, - // CHECK-SAME: name: "<lambda_1>", - // CHECK-SAME: flags: DIFlagFwdDecl - c.lambda2(); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits