r248511 - Module Debugging: Emit submodules as nested DW_TAG_modules.

Adrian Prantl via cfe-commits cfe-commits at lists.llvm.org
Thu Sep 24 09:10:11 PDT 2015


Author: adrian
Date: Thu Sep 24 11:10:10 2015
New Revision: 248511

URL: http://llvm.org/viewvc/llvm-project?rev=248511&view=rev
Log:
Module Debugging: Emit submodules as nested DW_TAG_modules.

Added:
    cfe/trunk/test/Modules/DebugInfoSubmoduleImport.c
Modified:
    cfe/trunk/include/clang/AST/ExternalASTSource.h
    cfe/trunk/lib/AST/ExternalASTSource.cpp
    cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
    cfe/trunk/test/Modules/DebugInfoSubmodules.c

Modified: cfe/trunk/include/clang/AST/ExternalASTSource.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/ExternalASTSource.h?rev=248511&r1=248510&r2=248511&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/ExternalASTSource.h (original)
+++ cfe/trunk/include/clang/AST/ExternalASTSource.h Thu Sep 24 11:10:10 2015
@@ -159,7 +159,7 @@ public:
         : PCHModuleName(std::move(Name)), Path(std::move(Path)),
           ASTFile(std::move(ASTFile)), Signature(Signature){};
     ASTSourceDescriptor(const Module &M);
-    std::string getFullModuleName() const;
+    std::string getModuleName() const;
     StringRef getPath() const { return Path; }
     StringRef getASTFile() const { return ASTFile; }
     uint64_t getSignature() const { return Signature; }

Modified: cfe/trunk/lib/AST/ExternalASTSource.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExternalASTSource.cpp?rev=248511&r1=248510&r2=248511&view=diff
==============================================================================
--- cfe/trunk/lib/AST/ExternalASTSource.cpp (original)
+++ cfe/trunk/lib/AST/ExternalASTSource.cpp Thu Sep 24 11:10:10 2015
@@ -36,9 +36,9 @@ ExternalASTSource::ASTSourceDescriptor::
     ASTFile = File->getName();
 }
 
-std::string ExternalASTSource::ASTSourceDescriptor::getFullModuleName() const {
+std::string ExternalASTSource::ASTSourceDescriptor::getModuleName() const {
   if (ClangModule)
-    return ClangModule->getFullModuleName();
+    return ClangModule->Name;
   else
     return PCHModuleName;
 }

Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=248511&r1=248510&r2=248511&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Thu Sep 24 11:10:10 2015
@@ -1707,18 +1707,23 @@ CGDebugInfo::getOrCreateModuleRef(Extern
     }
   }
 
-  std::string FullModuleName = Mod.getFullModuleName();
-  if (CreateSkeletonCU) {
+  bool IsRootModule = M ? !M->Parent : true;
+  if (CreateSkeletonCU && IsRootModule) {
     llvm::DIBuilder DIB(CGM.getModule());
-    DIB.createCompileUnit(TheCU->getSourceLanguage(), FullModuleName,
+    DIB.createCompileUnit(TheCU->getSourceLanguage(), Mod.getModuleName(),
                           Mod.getPath(), TheCU->getProducer(), true,
                           StringRef(), 0, Mod.getASTFile(),
                           llvm::DIBuilder::FullDebug, Mod.getSignature());
     DIB.finalize();
   }
+  llvm::DIModule *Parent =
+      IsRootModule ? nullptr
+                   : getOrCreateModuleRef(
+                         ExternalASTSource::ASTSourceDescriptor(*M->Parent),
+                         CreateSkeletonCU);
   llvm::DIModule *DIMod =
-      DBuilder.createModule(TheCU, FullModuleName, ConfigMacros, Mod.getPath(),
-                            CGM.getHeaderSearchOpts().Sysroot);
+      DBuilder.createModule(Parent, Mod.getModuleName(), ConfigMacros,
+                            Mod.getPath(), CGM.getHeaderSearchOpts().Sysroot);
   ModRef.reset(DIMod);
   return DIMod;
 }

Added: cfe/trunk/test/Modules/DebugInfoSubmoduleImport.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/DebugInfoSubmoduleImport.c?rev=248511&view=auto
==============================================================================
--- cfe/trunk/test/Modules/DebugInfoSubmoduleImport.c (added)
+++ cfe/trunk/test/Modules/DebugInfoSubmoduleImport.c Thu Sep 24 11:10:10 2015
@@ -0,0 +1,15 @@
+// RUN: rm -rf %t
+// RUN: %clang_cc1 -fmodules -fmodule-format=obj -g -dwarf-ext-refs \
+// RUN:     -fimplicit-module-maps -x c -fmodules-cache-path=%t -I %S/Inputs \
+// RUN:     %s -emit-llvm -o - | FileCheck %s
+#include "DebugSubmoduleA.h"
+#include "DebugSubmoduleB.h"
+
+// CHECK: !DICompileUnit
+// CHECK-NOT: !DICompileUnit
+// CHECK: !DIModule(scope: ![[PARENT:.*]], name: "DebugSubmoduleA"
+// CHECK: [[PARENT]] = !DIModule(scope: null, name: "DebugSubmodules"
+// CHECK: !DIModule(scope: ![[PARENT]], name: "DebugSubmoduleB"
+// CHECK: !DICompileUnit({{.*}}splitDebugFilename: {{.*}}DebugSubmodules
+// CHECK-SAME:                 dwoId:
+// CHECK-NOT: !DICompileUnit

Modified: cfe/trunk/test/Modules/DebugInfoSubmodules.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/DebugInfoSubmodules.c?rev=248511&r1=248510&r2=248511&view=diff
==============================================================================
--- cfe/trunk/test/Modules/DebugInfoSubmodules.c (original)
+++ cfe/trunk/test/Modules/DebugInfoSubmodules.c Thu Sep 24 11:10:10 2015
@@ -1,16 +1,18 @@
 // RUN: rm -rf %t
 // RUN: %clang_cc1 -fmodules -fmodule-format=obj -g -dwarf-ext-refs \
 // RUN:     -fimplicit-module-maps -x c -fmodules-cache-path=%t -I %S/Inputs \
-// RUN:     %s -mllvm -debug-only=pchcontainer 2>&1 | FileCheck %s
+// RUN:     %s -mllvm -debug-only=pchcontainer -emit-llvm -o %t.ll \
+// RUN:     2>&1 | FileCheck %s
 // REQUIRES: asserts
 #include "DebugSubmoduleA.h"
 
 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "A",
 // CHECK-SAME:             scope: ![[SUBMODULEA:[0-9]+]]
-// CHECK: ![[SUBMODULEA]] = !DIModule(
-// CHECK-SAME:                        name: "DebugSubmodules.DebugSubmoduleA",
+// CHECK: ![[SUBMODULEA]] = !DIModule(scope: ![[PARENT:[0-9]+]],
+// CHECK-SAME:                        name: "DebugSubmoduleA",
+// CHECK: ![[PARENT]] = !DIModule(scope: null, name: "DebugSubmodules"
 
 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "B",
 // CHECK-SAME:             scope: ![[SUBMODULEB:[0-9]+]]
-// CHECK: ![[SUBMODULEB]] = !DIModule(
-// CHECK-SAME:                        name: "DebugSubmodules.DebugSubmoduleB",
+// CHECK: ![[SUBMODULEB]] = !DIModule(scope: ![[PARENT]],
+// CHECK-SAME:                        name: "DebugSubmoduleB",




More information about the cfe-commits mailing list