<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hello Pasi,<div class=""><br class=""></div><div class="">When I ran a make check-all I did not see any crashes.  Can you point me to the test case for the lld-link crash?  Then I can fix this. Top of tree for my just now with a make check-all also is clean and the 4 lld build bots appear to be green at this time.</div><div class=""><br class=""></div><div class="">The constructor for Archive::Child::Child() only allows nullptr as EC argument when Parent and Start are also nullptr.  Which is needed for the default constructor of child_iterator().  At one point we needed this as I think ArchiveWriter was using this.  As it would have seemed to be more correct to pass EC as a reference but I didn’t see how to make that work with a default constructor for child_iterator().</div><div class=""><br class=""></div><div class="">In the original diff I had this as an assert (see <a href="http://reviews.llvm.org/D13989" class="">http://reviews.llvm.org/D13989</a> ):</div><div class=""><br class=""></div><div class=""><div class="">    if (MemberSize.getError()) {</div>      assert (EC && "Error must be caught");<br class="">      *EC = MemberSize.getError();<br class="">      return;<br class="">    }</div><div class=""><br class=""></div><div class="">But Rafael said in the review: "You can write this as”:</div><div class=""><br class="">     if ((EC = MemberSize.getError())</div><div class="">      return;</div><div class=""><br class=""></div><div class=""><div class="">The fix to a crash lld-link is likely simply passing a proper value for EC and testing for the error.  And I suspect this is what Rafael would like to see as he doesn’t want the code to eat these errors in any place.</div><div class=""><br class=""></div><div class="">Happy to make this change if you can point me to the crash or the test case.</div><div class=""><br class=""></div><div class="">Kev</div><div class=""><br class=""></div><div><blockquote type="cite" class=""><div class="">On Nov 6, 2015, at 12:23 AM, Pasi Parviainen <<a href="mailto:pasi.parviainen@iki.fi" class="">pasi.parviainen@iki.fi</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">@@ -86,7 +86,8 @@ Archive::Child::Child(const Archive *Par<br class="">                       uint16_t StartOfFile)<br class="">     : Parent(Parent), Data(Data), StartOfFile(StartOfFile) {}<br class=""><br class="">-Archive::Child::Child(const Archive *Parent, const char *Start)<br class="">+Archive::Child::Child(const Archive *Parent, const char *Start,<br class="">+                      std::error_code *EC)<br class="">     : Parent(Parent) {<br class="">   if (!Start)<br class="">     return;<br class="">@@ -94,7 +95,10 @@ Archive::Child::Child(const Archive *Par<br class="">   uint64_t Size = sizeof(ArchiveMemberHeader);<br class="">   Data = StringRef(Start, Size);<br class="">   if (!isThinMember()) {<br class="">-    Size += getRawSize();<br class="">+    ErrorOr<uint64_t> MemberSize = getRawSize();<br class="">+    if ((*EC = MemberSize.getError()))<br class="">+      return;<br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">lld-link is crashing here since matching changes to lld in r252193. Crash is caused by passing nullptr as EC argument. If nullptr is valid value for EC then this check should be more like:</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">   if (!MemberSize) {</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">     if (EC)</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">       *EC = MemberSize.getError();</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">     return;</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">   }</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Pasi</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote></div><br class=""></div></body></html>