From bdffea12d0be98efbf6d6ec4dcba3267b8aa7dec Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Thu, 30 Aug 2018 21:21:16 +0000 Subject: [PATCH] dsymutil: Avoid pruning non-type forward declarations inside DW_TAG_module forward declarations. Especially with template instantiations, there are legitimate reasons why for declarations might be emitted into a DW_TAG_module skeleton / forward-declaration sub-tree, that are not forward declarations in the sense of that there is a more complete definition over in a .pcm file. The example in the testcase is a constant DW_TAG_member of a DW_TAG_class template instatiation. rdar://problem/43623196 llvm-svn: 341123 --- .../tools/dsymutil/Inputs/modules-pruning/1.o | Bin 0 -> 2984 bytes .../dsymutil/Inputs/modules-pruning/Outer.pcm | Bin 0 -> 20988 bytes .../tools/dsymutil/X86/modules-pruning.cpp | 59 +++++++++++++++ llvm/tools/dsymutil/DwarfLinker.cpp | 71 +++++++++--------- 4 files changed, 95 insertions(+), 35 deletions(-) create mode 100644 llvm/test/tools/dsymutil/Inputs/modules-pruning/1.o create mode 100644 llvm/test/tools/dsymutil/Inputs/modules-pruning/Outer.pcm create mode 100644 llvm/test/tools/dsymutil/X86/modules-pruning.cpp diff --git a/llvm/test/tools/dsymutil/Inputs/modules-pruning/1.o b/llvm/test/tools/dsymutil/Inputs/modules-pruning/1.o new file mode 100644 index 0000000000000000000000000000000000000000..89cb1b467ed2d4b8142897d5969d04e94c1339da GIT binary patch literal 2984 zcma)8U2IfE6h3pecf0Mjceky9HjuKKT1z5Z3PeF0TK;4UR!J#HhDXiUKPq%ZKOF{Z{~h%s0Lk0!qBgOX@egcsriRwI7jy>t7sT_PtrbAIQWGiPS! z?ss#y|E(2KKEVL40Z(y=fI)5G0PXwGUcVc-sB=6Um_lyQ^K84EI$qWWgl!M+IyAgs zd)gkY5RZ_z>O~CtYGjJSBikNHB_>AgQhD5Q+4jyCwhcYwg~h}9R(o#h`sNcftY>?8 z@kC-gHOcyx;;mqFK!3VIzA&}2Ae=Hi)5FW;(*^n}@#=MUpT_-I_wgU>SC?89FBeZb zkd=4?JV20!li%6=rBs0zFBY>YJ0H)bO316k+oSPjG{(&b#49AmlAKbBH>dGBG~NdR ztt^Q9*H?@uEAiTOlX~_1s}G1*eyvz_zlSwmTI0?AFJ7{cLtSNiBL8Y8KVsX@?p)Z4 z$gIXYs+~vcMA(AWL03Yp*l+5XogT+&xDzUW9}#`u&TG6`ji*fk>@iQL^zL6alXnm+ z`!}QUKGc);;ogxp0Z8AWCG~Y67G{FwCNkIx?$!IrLh>viWFL4jao_s*7rP%wKM*_j zOKkd9IQH(TyT5TpZ2Efm$hCB6&702r`S`h0cVq7?$qB8&i8yh@j$BJ-j33k9(cZ-khX!FhLYqEN_2I=4!uG?YpUEg44Mb3KEby{Q93 ziCsH-c1>1uZ-9GvdykZlWlGZREE+8)bE2BmqgIRQv%)J^Sxu@LkB8B&eAd)S>&!_D z-QEHN4~e0k2>PsG@TuU_I2f~0eAYk<*$!j1@g z7$YrtYd12ROlQ8kYIBn;Z0*JyZJ%wgo!O2eqzTv3{ZR#+3tA&jIyXRMua*>i_l-de z`@swt2NoH=F&H&w7NauS%~OycfsKe#e&!hutJ=$u68I9sS!$p<)ybvwFGOS|40SMp z@g-_qLF2;lE7aBwV3dYWF*HtNFqB14h>mas18Egl9sC~S+h7~qg!x}VhPbbAKL!$) zQwI(BEm{>j|wzQ6jRv$;HA;_+}hz@RLcE*?4|7ZL9ah|wh!(H3t7Xj#19 zanE1AWpS@+bz(@=@vsUv)CSHYixsT~&(5*_d-wGEBHOI+TgHw?_q^RacI1lA({)tM zOLTs-41gX1ht#Y@Xn@!w+Wj<0w)cgAvg{MUx4xR6p9Yct0E|+F%K!iX literal 0 HcmV?d00001 diff --git a/llvm/test/tools/dsymutil/Inputs/modules-pruning/Outer.pcm b/llvm/test/tools/dsymutil/Inputs/modules-pruning/Outer.pcm new file mode 100644 index 0000000000000000000000000000000000000000..657a024a686e50ba961995955b4b1859fad93a71 GIT binary patch literal 20988 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 aPS)$u#DH++(~rzg6#Ks>Mlt_w;{O3zaw$0g literal 0 HcmV?d00001 diff --git a/llvm/test/tools/dsymutil/X86/modules-pruning.cpp b/llvm/test/tools/dsymutil/X86/modules-pruning.cpp new file mode 100644 index 000000000000..7f331f183f0a --- /dev/null +++ b/llvm/test/tools/dsymutil/X86/modules-pruning.cpp @@ -0,0 +1,59 @@ +// RUN: dsymutil -f -oso-prepend-path=%p/../Inputs/modules-pruning \ +// RUN: -y %p/dummy-debug-map.map -o - \ +// RUN: | llvm-dwarfdump --name isRef -p - | FileCheck %s + +/* Compile with: + cat >modules.modulemap < struct is_reference : false_type {}; +template struct is_reference : true_type {}; + +template +class Template { +public: + static const bool isRef = is_reference::value; + Template() {} +}; +} +#else + +#include "template.h" + +void foo() { + M::Template TB1; + TB1.isRef; +} + +#endif diff --git a/llvm/tools/dsymutil/DwarfLinker.cpp b/llvm/tools/dsymutil/DwarfLinker.cpp index dae15c2aa32b..74598741f9f9 100644 --- a/llvm/tools/dsymutil/DwarfLinker.cpp +++ b/llvm/tools/dsymutil/DwarfLinker.cpp @@ -155,6 +155,40 @@ static bool isODRAttribute(uint16_t Attr) { llvm_unreachable("Improper attribute."); } +static bool isTypeTag(uint16_t Tag) { + switch (Tag) { + case dwarf::DW_TAG_array_type: + case dwarf::DW_TAG_class_type: + case dwarf::DW_TAG_enumeration_type: + case dwarf::DW_TAG_pointer_type: + case dwarf::DW_TAG_reference_type: + case dwarf::DW_TAG_string_type: + case dwarf::DW_TAG_structure_type: + case dwarf::DW_TAG_subroutine_type: + case dwarf::DW_TAG_typedef: + case dwarf::DW_TAG_union_type: + case dwarf::DW_TAG_ptr_to_member_type: + case dwarf::DW_TAG_set_type: + case dwarf::DW_TAG_subrange_type: + case dwarf::DW_TAG_base_type: + case dwarf::DW_TAG_const_type: + case dwarf::DW_TAG_constant: + case dwarf::DW_TAG_file_type: + case dwarf::DW_TAG_namelist: + case dwarf::DW_TAG_packed_type: + case dwarf::DW_TAG_volatile_type: + case dwarf::DW_TAG_restrict_type: + case dwarf::DW_TAG_atomic_type: + case dwarf::DW_TAG_interface_type: + case dwarf::DW_TAG_unspecified_type: + case dwarf::DW_TAG_shared_type: + return true; + default: + break; + } + return false; +} + bool DwarfLinker::DIECloner::getDIENames(const DWARFDie &Die, AttributesInfo &Info, OffsetsStringPool &StringPool, @@ -269,7 +303,8 @@ static bool analyzeContextInfo(const DWARFDie &DIE, unsigned ParentIdx, // DW_TAG_module or a DW_TAG_module that contains nothing but // forward declarations. Info.Prune &= (DIE.getTag() == dwarf::DW_TAG_module) || - dwarf::toUnsigned(DIE.find(dwarf::DW_AT_declaration), 0); + (isTypeTag(DIE.getTag()) && + dwarf::toUnsigned(DIE.find(dwarf::DW_AT_declaration), 0)); // Don't prune it if there is no definition for the DIE. Info.Prune &= Info.Ctxt && Info.Ctxt->getCanonicalDIEOffset(); @@ -1258,40 +1293,6 @@ bool DwarfLinker::RelocationManager::applyValidRelocs( return Applied; } -static bool isTypeTag(uint16_t Tag) { - switch (Tag) { - case dwarf::DW_TAG_array_type: - case dwarf::DW_TAG_class_type: - case dwarf::DW_TAG_enumeration_type: - case dwarf::DW_TAG_pointer_type: - case dwarf::DW_TAG_reference_type: - case dwarf::DW_TAG_string_type: - case dwarf::DW_TAG_structure_type: - case dwarf::DW_TAG_subroutine_type: - case dwarf::DW_TAG_typedef: - case dwarf::DW_TAG_union_type: - case dwarf::DW_TAG_ptr_to_member_type: - case dwarf::DW_TAG_set_type: - case dwarf::DW_TAG_subrange_type: - case dwarf::DW_TAG_base_type: - case dwarf::DW_TAG_const_type: - case dwarf::DW_TAG_constant: - case dwarf::DW_TAG_file_type: - case dwarf::DW_TAG_namelist: - case dwarf::DW_TAG_packed_type: - case dwarf::DW_TAG_volatile_type: - case dwarf::DW_TAG_restrict_type: - case dwarf::DW_TAG_atomic_type: - case dwarf::DW_TAG_interface_type: - case dwarf::DW_TAG_unspecified_type: - case dwarf::DW_TAG_shared_type: - return true; - default: - break; - } - return false; -} - static bool isObjCSelector(StringRef Name) { return Name.size() > 2 && (Name[0] == '-' || Name[0] == '+') && (Name[1] == '[');