[PATCH] D52840: Include Python binding tests in CMake rules

Ulrich Weigand via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 15 11:39:44 PDT 2018


uweigand added a comment.

In https://reviews.llvm.org/D52840#1265615, @mgorny wrote:

> The first one seems to indicate that your `libclang.so` is broken in release mode (optimization error?). The second one is correct (some of the tests test for errors, and apparently don't silence the messages).


Ok, thanks for the clarification on the second point.

As to the first issue, it turned out to be more complicated.  The wrong value results from this call in CursorVisitor::Visit

  switch (Visitor(Cursor, Parent, ClientData)) {

This is a callback routine passed in from the caller, which in the case of the Python bindings means that an FFI closure is being called.

Now, due to a historical quirk in the FFI ABI, return values of integral type smaller than the register word size must be passed as the special "ffi_arg" type when using FFI (either for calls or for closures).  It seems the Python 2.7 code that interfaces with FFI does not correctly respect this.  As a result, it seems that when the closure returns a 32-bit value, it is not properly extended and the high bits of the return register contain garbage.

But that violates our ABI, which requires extension to full register size.   And it seems the clang code, when built with optimization, does indeed rely on that ABI guarantee.

So there's a bug in Python (or depending on how you want to look at it, in libffi -- that part of the interface has also long been under-documented unfortunately), which hits on our platform.  I'll see if I can do anything about that, but for now we'll probably want to disable those tests on SystemZ.


Repository:
  rC Clang

https://reviews.llvm.org/D52840





More information about the llvm-commits mailing list