[clang] 9b21d4b - Revert "[DebugInfo][CodeView] Use <lambda_n> as the display name for lambdas."

Amy Huang via cfe-commits cfe-commits at lists.llvm.org
Thu Jan 28 16:41:49 PST 2021


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();
 }


        


More information about the cfe-commits mailing list