<div dir="ltr">MSan bootstrap also fails on this:<div><br></div><div><a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/builds/4564/steps/check-llvm%20msan/logs/stdio">http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/builds/4564/steps/check-llvm%20msan/logs/stdio</a><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Sep 24, 2014 at 1:48 PM, Akira Hatanaka <span dir="ltr"><<a href="mailto:ahatanak@gmail.com" target="_blank">ahatanak@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Benjamin,<div><br></div><div>I reverted this commit since it was breaking a few build bots. These two tests were failing:</div><div><br></div><div><p style="margin:0px;font-size:11px;font-family:Menlo">Failing Tests (2):</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">    LLVM :: MC/ELF/many-sections-2.s</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">    LLVM :: MC/ELF/many-sections.s</p></div><div><br></div><div>This is the stack dump when many_sections.s was assembled with llvm-mc:</div><div><br></div><div><p style="margin:0px;font-size:11px;font-family:Menlo">FAIL: LLVM :: MC/ELF/many-sections-2.s (11630 of 11631)</p><p style="margin:0px;font-size:11px;font-family:Menlo"><br></p><p style="margin:0px;font-size:11px;font-family:Menlo">Exit Code: 139</p><p style="margin:0px;font-size:11px;font-family:Menlo;min-height:13px"><br></p><p style="margin:0px;font-size:11px;font-family:Menlo">Command Output (stderr):</p><p style="margin:0px;font-size:11px;font-family:Menlo">--</p><p style="margin:0px;font-size:11px;font-family:Menlo">0  llvm-mc                  0x000000010994685e llvm::sys::PrintStackTrace(__sFILE*) + 46</p><p style="margin:0px;font-size:11px;font-family:Menlo">1  llvm-mc                  0x0000000109946b6b PrintStackTraceSignalHandler(void*) + 27</p><p style="margin:0px;font-size:11px;font-family:Menlo">2  llvm-mc                  0x0000000109946f95 SignalHandler(int) + 565</p><p style="margin:0px;font-size:11px;font-family:Menlo">3  libsystem_platform.dylib 0x00007fff936bb5aa _sigtramp + 26</p><p style="margin:0px;font-size:11px;font-family:Menlo">4  libsystem_platform.dylib 0x00007fd2c7bef91e _sigtramp + 877872014</p><p style="margin:0px;font-size:11px;font-family:Menlo">5  llvm-mc                  0x00000001098e71c0 void std::__1::__sort<llvm::StringTableBuilder::finalize()::$_0&, llvm::StringRef*>(llvm::StringRef*, llvm::StringRef*, llvm::StringTableBuilder::finalize()::$_0&) + 768</p><p style="margin:0px;font-size:11px;font-family:Menlo">6  llvm-mc                  0x00000001098e7dad void std::__1::__sort<llvm::StringTableBuilder::finalize()::$_0&, llvm::StringRef*>(llvm::StringRef*, llvm::StringRef*, llvm::StringTableBuilder::finalize()::$_0&) + 3821</p><p style="margin:0px;font-size:11px;font-family:Menlo">










</p><p style="margin:0px;font-size:11px;font-family:Menlo">7  llvm-mc                  0x00000001098e7dad void std::__1::__sort<llvm::StringTableBuilder::finalize()::$_0&, llvm::StringRef*>(llvm::StringRef*, llvm::StringRef*, llvm::StringTableBuilder::finalize()::$_0&) + 3821</p><p style="margin:0px;font-size:11px;font-family:Menlo">8  llvm-mc                  0x00000001098e7dad void std::__1::__sort<llvm::StringTableBuilder::finalize()::$_0&, llvm::StringRef*>(llvm::StringRef*, llvm::StringRef*, llvm::StringTableBuilder::finalize()::$_0&) + 3821</p><p style="margin:0px;font-size:11px;font-family:Menlo">9  llvm-mc                  0x00000001098e7d69 void std::__1::__sort<llvm::StringTableBuilder::finalize()::$_0&, llvm::StringRef*>(llvm::StringRef*, llvm::StringRef*, llvm::StringTableBuilder::finalize()::$_0&) + 3753</p><p style="margin:0px;font-size:11px;font-family:Menlo">10 llvm-mc                  0x00000001098e6c45 llvm::StringTableBuilder::finalize() + 309</p><p style="margin:0px;font-size:11px;font-family:Menlo">11 llvm-mc                  0x000000010985081d (anonymous namespace)::ELFObjectWriter::CreateMetadataSections(llvm::MCAssembler&, llvm::MCAsmLayout&, llvm::DenseMap<llvm::MCSectionELF const*, unsigned int, llvm::DenseMapInfo<llvm::MCSectionELF const*> >&, llvm::DenseMap<llvm::MCSectionELF const*, llvm::MCSectionELF const*, llvm::DenseMapInfo<llvm::MCSectionELF const*> > const&) + 1293</p><p style="margin:0px;font-size:11px;font-family:Menlo">12 llvm-mc                  0x000000010984cf7f (anonymous namespace)::ELFObjectWriter::WriteObject(llvm::MCAssembler&, llvm::MCAsmLayout const&) + 47915 llvm-mc                  0x00000001098abc05 llvm::MCELFStreamer::FinishImpl() + 69</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">16 llvm-mc                  0x00000001098ce1af llvm::MCStreamer::Finish() + 159</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">17 llvm-mc                  0x00000001097e6cd1 (anonymous namespace)::AsmParser::Run(bool, bool) + 2689</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">18 llvm-mc                  0x000000010944aacf AssembleInput(char const*, llvm::Target const*, llvm::SourceMgr&, llvm::MCContext&, llvm::MCStreamer&, llvm::MCAsmInfo&, llvm::MCSubtargetInfo&, llvm::MCInstrInfo&, llvm::MCTargetOptions&) + 959</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">19 llvm-mc                  0x0000000109448d79 main + 9977</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">20 libdyld.dylib            0x00007fff8c0585fd start + 1</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">Stack dump:</p><p style="margin:0px;font-size:11px;font-family:Menlo"><br></p></div><div>I wonder if the tests are failing because the compare function doesn't satisfy strict weak ordering. My understanding is that if A == B, comp(A, B) should return false, but I believe the compare function used in this patch returns true.</div><div><br></div><div>If I check A != B before calling std::lexicographical_compare, the tests pass.</div><div><br></div><div>Let me know if you need more information.</div><div><br></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Sep 24, 2014 at 6:19 AM, Benjamin Kramer <span dir="ltr"><<a href="mailto:benny.kra@googlemail.com" target="_blank">benny.kra@googlemail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: d0k<br>
Date: Wed Sep 24 08:19:28 2014<br>
New Revision: 218380<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=218380&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=218380&view=rev</a><br>
Log:<br>
Replace a hand-written suffix compare with std::lexicographical_compare.<br>
<br>
No functionality change.<br>
<br>
Modified:<br>
    llvm/trunk/lib/MC/StringTableBuilder.cpp<br>
<br>
Modified: llvm/trunk/lib/MC/StringTableBuilder.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/StringTableBuilder.cpp?rev=218380&r1=218379&r2=218380&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/StringTableBuilder.cpp?rev=218380&r1=218379&r2=218380&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/MC/StringTableBuilder.cpp (original)<br>
+++ llvm/trunk/lib/MC/StringTableBuilder.cpp Wed Sep 24 08:19:28 2014<br>
@@ -12,25 +12,17 @@<br>
<br>
 using namespace llvm;<br>
<br>
-static bool compareBySuffix(StringRef a, StringRef b) {<br>
-  size_t sizeA = a.size();<br>
-  size_t sizeB = b.size();<br>
-  size_t len = std::min(sizeA, sizeB);<br>
-  for (size_t i = 0; i < len; ++i) {<br>
-    char ca = a[sizeA - i - 1];<br>
-    char cb = b[sizeB - i - 1];<br>
-    if (ca != cb)<br>
-      return ca > cb;<br>
-  }<br>
-  return sizeA > sizeB;<br>
-}<br>
-<br>
 void StringTableBuilder::finalize() {<br>
   SmallVector<StringRef, 8> Strings;<br>
   for (auto i = StringIndexMap.begin(), e = StringIndexMap.end(); i != e; ++i)<br>
     Strings.push_back(i->getKey());<br>
<br>
-  std::sort(Strings.begin(), Strings.end(), compareBySuffix);<br>
+  // Sort the vector so a string is sorted above its suffixes.<br>
+  std::sort(Strings.begin(), Strings.end(), [](StringRef A, StringRef B) {<br>
+    typedef std::reverse_iterator<StringRef::iterator> Reverse;<br>
+    return !std::lexicographical_compare(Reverse(A.end()), Reverse(A.begin()),<br>
+                                         Reverse(B.end()), Reverse(B.begin()));<br>
+  });<br>
<br>
   // FIXME: Starting with a null byte is ELF specific. Generalize this so we<br>
   // can use the class with other object formats.<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr">Alexey Samsonov<br><a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a></div>
</div>