diff options
-rw-r--r-- | llvm/test/tools/dsymutil/Inputs/submodules/1.o | bin | 0 -> 2208 bytes | |||
-rw-r--r-- | llvm/test/tools/dsymutil/Inputs/submodules/Parent.pcm | bin | 0 -> 25104 bytes | |||
-rw-r--r-- | llvm/test/tools/dsymutil/X86/submodules.m | 40 | ||||
-rw-r--r-- | llvm/tools/dsymutil/DwarfLinker.cpp | 2 |
4 files changed, 41 insertions, 1 deletions
diff --git a/llvm/test/tools/dsymutil/Inputs/submodules/1.o b/llvm/test/tools/dsymutil/Inputs/submodules/1.o Binary files differnew file mode 100644 index 00000000000..f95b70cd05c --- /dev/null +++ b/llvm/test/tools/dsymutil/Inputs/submodules/1.o diff --git a/llvm/test/tools/dsymutil/Inputs/submodules/Parent.pcm b/llvm/test/tools/dsymutil/Inputs/submodules/Parent.pcm Binary files differnew file mode 100644 index 00000000000..dca33af4268 --- /dev/null +++ b/llvm/test/tools/dsymutil/Inputs/submodules/Parent.pcm diff --git a/llvm/test/tools/dsymutil/X86/submodules.m b/llvm/test/tools/dsymutil/X86/submodules.m new file mode 100644 index 00000000000..64efc2f54ba --- /dev/null +++ b/llvm/test/tools/dsymutil/X86/submodules.m @@ -0,0 +1,40 @@ +/* Compile with: + cat >modules.modulemap <<EOF + module Parent { + module Child { + header "Child.h" + } + } +EOF + clang -D CHILD_H -E -o Child.h submodules.m + clang -cc1 -emit-obj -fmodules -fmodule-map-file=modules.modulemap \ + -fmodule-format=obj -g -dwarf-ext-refs -fmodules-cache-path=. \ + -fdisable-module-hash submodules.m -o 1.o +*/ + +// RUN: llvm-dsymutil -f -oso-prepend-path=%p/../Inputs/submodules \ +// RUN: -y %p/dummy-debug-map.map -o - \ +// RUN: | llvm-dwarfdump --debug-dump=info - | FileCheck %s + +// --------------------------------------------------------------------- +#ifdef CHILD_H +// --------------------------------------------------------------------- +// CHECK: DW_TAG_compile_unit +// CHECK-NOT: DW_TAG +// CHECK: DW_TAG_module +// CHECK-NEXT: DW_AT_name{{.*}}"Parent" +// CHECK: DW_TAG_module +// CHECK-NEXT: DW_AT_name{{.*}}"Child" +// CHECK: DW_TAG_structure_type +// CHECK-NOT: DW_TAG +// CHECK: DW_AT_name {{.*}}"PruneMeNot" + +struct PruneMeNot; + +// --------------------------------------------------------------------- +#else +// --------------------------------------------------------------------- + +@import Parent.Child; +int main(int argc, char **argv) { return 0; } +#endif diff --git a/llvm/tools/dsymutil/DwarfLinker.cpp b/llvm/tools/dsymutil/DwarfLinker.cpp index 1aa15c5fb67..8489189cc16 100644 --- a/llvm/tools/dsymutil/DwarfLinker.cpp +++ b/llvm/tools/dsymutil/DwarfLinker.cpp @@ -1780,7 +1780,7 @@ static bool analyzeContextInfo(const DWARFDebugInfoEntryMinimal *DIE, // definitions match)." // // We treat non-C++ modules like namespaces for this reason. - if (DIE->getTag() == dwarf::DW_TAG_module && + if (DIE->getTag() == dwarf::DW_TAG_module && ParentIdx == 0 && DIE->getAttributeValueAsString(&CU.getOrigUnit(), dwarf::DW_AT_name, "") != CU.getClangModuleName()) { InImportedModule = true; |