[llvm] r286639 - [ORC] Re-apply 286620 with fixes for the ErrorSuccess class.
    Ulrich Weigand via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Mon Nov 14 10:24:55 PST 2016
    
    
  
This causes several unit tests to simply hang on s390x, which breaks the
build bot:
  OrcJITTests --gtest_filter=DummyRPC.TestAsyncIntInt
  OrcJITTests --gtest_filter=DummyRPC.TestAsyncVoidBool
  OrcJITTests --gtest_filter=DummyRPC.TestSerialization
In all these cases, the symptom is the same: both threads spin endlessly in
QueueChannel::readBytes.   Looking at the code, the problem seems to be
here:
      // If there's nothing to read then yield.
      while (InQueue.empty())
        std::this_thread::yield();
At least when using a GCC 4.8.5 host compiler with its associated libcstdc+
+ headers to build this test, the "yield" function is a no-op and optimized
out, so we end up with effectively:
      while (InQueue.empty())
        ;
Since the "empty" function just tests some non-volatile member variables,
this in turn gets optimized by the compiler to:
      if (InQueue.empty())
        for (;;);
And here we indeed spin:
=> 0x00000000010d5058 <+64>:    j       0x10d5058
<_ZN12QueueChannel9readBytesEPcj+64>
Mit freundlichen Gruessen / Best Regards
Ulrich Weigand
--
  Dr. Ulrich Weigand | Phone: +49-7031/16-3727
  STSM, GNU/Linux compilers and toolchain
  IBM Deutschland Research & Development GmbH
  Vorsitzende des Aufsichtsrats: Martina Koederitz | Geschäftsführung: Dirk
Wittkopp
  Sitz der Gesellschaft: Böblingen | Registergericht: Amtsgericht
Stuttgart, HRB 243294
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161114/30d04406/attachment.html>
    
    
More information about the llvm-commits
mailing list