pybind11/tests
Jason Rhinelander d598172993 Fix builtin exception handlers to work across modules
The builtin exception handler currently doesn't work across modules
under clang/libc++ for builtin pybind exceptions like
`pybind11::error_already_set` or `pybind11::stop_iteration`: under
RTLD_LOCAL module loading clang considers each module's exception
classes distinct types.  This then means that the base exception
translator fails to catch the exceptions and the fall through to the
generic `std::exception` handler, which completely breaks things like
`stop_iteration`: only the `stop_iteration` of the first module loaded
actually works properly; later modules raise a RuntimeError with no
message when trying to invoke their iterators.

For example, two modules defined like this exhibit the behaviour under
clang++/libc++:

z1.cpp:
    #include <pybind11/pybind11.h>
    #include <pybind11/stl_bind.h>
    namespace py = pybind11;
    PYBIND11_MODULE(z1, m) {
        py::bind_vector<std::vector<long>>(m, "IntVector");
    }

z2.cpp:
    #include <pybind11/pybind11.h>
    #include <pybind11/stl_bind.h>
    namespace py = pybind11;
    PYBIND11_MODULE(z2, m) {
        py::bind_vector<std::vector<double>>(m, "FloatVector");
    }

Python:
    import z1, z2
    for i in z2.FloatVector():
        pass

results in:
    Traceback (most recent call last):
      File "zs.py", line 2, in <module>
        for i in z2.FloatVector():
    RuntimeError

This commit fixes the issue by adding a new exception translator each
time the internals pointer is initialized from python builtins: this
generally means the internals data was initialized by some other
module.  (The extra translator(s) are skipped under libstdc++).
2017-08-04 10:47:34 -04:00
..
test_cmake_build Move test_cmake_build target code into its subdirectory 2017-06-27 10:38:41 +02:00
test_embed Fix embedded threads test on MSVC2015 / Python 2.7 2017-06-24 21:59:55 +02:00
CMakeLists.txt Fix builtin exception handlers to work across modules 2017-08-04 10:47:34 -04:00
conftest.py Minor pytest maintenance (#702) 2017-03-10 15:42:42 +01:00
constructor_stats.h Support multiple inheritance from python 2017-06-12 09:56:55 -03:00
object.h Improve custom holder support (#607) 2017-01-31 17:05:44 +01:00
pybind11_cross_module_tests.cpp Fix builtin exception handlers to work across modules 2017-08-04 10:47:34 -04:00
pybind11_tests.cpp Split test_python_types.cpp into builtin_casters, stl and pytypes 2017-06-27 10:38:41 +02:00
pybind11_tests.h Use rvalue subcasting when casting an rvalue container 2017-07-05 12:27:14 -04:00
pytest.ini Don't let pytest discover tests from test_cmake_build and test_embed 2017-06-10 16:44:21 +02:00
test_buffers.cpp Convenience constructor templates for buffer_info (#860) 2017-05-29 03:13:55 +02:00
test_buffers.py Fix buffer protocol inheritance 2017-05-29 02:03:58 +02:00
test_builtin_casters.cpp Implicit conversions to bool + np.bool_ conversion (#925) 2017-07-23 11:02:43 -04:00
test_builtin_casters.py Implicit conversions to bool + np.bool_ conversion (#925) 2017-07-23 11:02:43 -04:00
test_call_policies.cpp Hold strong references to keep_alive patients 2017-06-24 12:59:46 -04:00
test_call_policies.py Make init_holder do registration, and rename to init_instance 2017-07-28 20:39:33 -04:00
test_callbacks.cpp Split test_python_types.cpp into builtin_casters, stl and pytypes 2017-06-27 10:38:41 +02:00
test_callbacks.py functional: support bound methods 2017-04-29 10:43:17 -04:00
test_chrono.cpp Fix for floating point durations 2017-03-11 23:04:16 -04:00
test_chrono.py Fix for floating point durations 2017-03-11 23:04:16 -04:00
test_class.cpp Add support custom sized operator deletes (#952) 2017-07-23 00:32:58 -04:00
test_class.py Add support custom sized operator deletes (#952) 2017-07-23 00:32:58 -04:00
test_constants_and_functions.cpp Support binding noexcept function/methods in C++17 2016-12-14 20:40:49 +01:00
test_constants_and_functions.py Support binding noexcept function/methods in C++17 2016-12-14 20:40:49 +01:00
test_copy_move.cpp Move tests from test_issues.cpp/py into appropriate files 2017-06-27 10:38:41 +02:00
test_copy_move.py Fix test suite under MSVC/Debug 2017-07-12 11:50:40 -04:00
test_docstring_options.cpp Fix extra docstring newlines under options.disable_function_signatures() 2017-03-08 12:32:42 -05:00
test_docstring_options.py Fix extra docstring newlines under options.disable_function_signatures() 2017-03-08 12:32:42 -05:00
test_eigen.cpp Fix indirect loading of Eigen::Ref 2017-06-29 11:31:54 +02:00
test_eigen.py Fix indirect loading of Eigen::Ref 2017-06-29 11:31:54 +02:00
test_enum.cpp enum_: fix implicit conversion on Python 2.7 2017-04-29 16:35:28 +02:00
test_enum.py pytest target: add USE_TERMINAL flag 2017-04-29 16:35:28 +02:00
test_eval_call.py Add checks to maintain a consistent Python code style and prevent bugs (#515) 2016-11-20 21:21:54 +01:00
test_eval.cpp Add py::exec() as a shortcut for py::eval<py::eval_statements>() 2017-05-08 20:46:16 +02:00
test_eval.py Rewrite eval tests to allow for simple asserts 2016-08-19 16:31:48 +02:00
test_exceptions.cpp Simplify error_already_set 2017-07-28 20:40:35 -04:00
test_exceptions.py Fix builtin exception handlers to work across modules 2017-08-04 10:47:34 -04:00
test_kwargs_and_defaults.cpp Add support for positional args with args/kwargs 2017-01-31 17:24:41 +01:00
test_kwargs_and_defaults.py Minor pytest maintenance (#702) 2017-03-10 15:42:42 +01:00
test_methods_and_attributes.cpp Support take_ownership for custom type casters given a pointer 2017-07-16 11:04:43 -04:00
test_methods_and_attributes.py Support take_ownership for custom type casters given a pointer 2017-07-16 11:04:43 -04:00
test_modules.cpp Move tests from test_issues.cpp/py into appropriate files 2017-06-27 10:38:41 +02:00
test_modules.py Split test_python_types.cpp into builtin_casters, stl and pytypes 2017-06-27 10:38:41 +02:00
test_multiple_inheritance.cpp Make init_holder do registration, and rename to init_instance 2017-07-28 20:39:33 -04:00
test_multiple_inheritance.py Superclass typo fix 2017-07-29 03:54:25 -04:00
test_numpy_array.cpp Now shape, size, ndims and itemsize are also signed integers. 2017-05-08 01:50:21 +02:00
test_numpy_array.py Now shape, size, ndims and itemsize are also signed integers. 2017-05-08 01:50:21 +02:00
test_numpy_dtypes.cpp Allow std::complex field with PYBIND11_NUMPY_DTYPE (#831) 2017-05-10 11:36:24 +02:00
test_numpy_dtypes.py Allow std::complex field with PYBIND11_NUMPY_DTYPE (#831) 2017-05-10 11:36:24 +02:00
test_numpy_vectorize.cpp vectorize: pass-through of non-vectorizable args 2017-05-24 20:43:41 -04:00
test_numpy_vectorize.py vectorize: pass-through of non-vectorizable args 2017-05-24 20:43:41 -04:00
test_opaque_types.cpp Make test initialization self-registering 2016-09-03 17:34:41 -04:00
test_opaque_types.py Prefer non-converting argument overloads 2017-02-03 20:47:17 -05:00
test_operator_overloading.cpp Move tests from test_issues.cpp/py into appropriate files 2017-06-27 10:38:41 +02:00
test_operator_overloading.py Move tests from test_issues.cpp/py into appropriate files 2017-06-27 10:38:41 +02:00
test_pickling.cpp fix segfault in test suite due to typo (fixes #586) 2017-01-04 15:05:20 +01:00
test_pickling.py WIP: PyPy support (#527) 2016-12-16 15:00:46 +01:00
test_pytypes.cpp Split test_python_types.cpp into builtin_casters, stl and pytypes 2017-06-27 10:38:41 +02:00
test_pytypes.py Make PYBIND11_OBJECT_CVT only convert if the type check fails 2017-08-04 10:14:55 -04:00
test_sequences_and_iterators.cpp Move tests from test_issues.cpp/py into appropriate files 2017-06-27 10:38:41 +02:00
test_sequences_and_iterators.py Split test_python_types.cpp into builtin_casters, stl and pytypes 2017-06-27 10:38:41 +02:00
test_smart_ptr.cpp Move tests from test_issues.cpp/py into appropriate files 2017-06-27 10:38:41 +02:00
test_smart_ptr.py Move tests from test_issues.cpp/py into appropriate files 2017-06-27 10:38:41 +02:00
test_stl_binders.cpp Use rvalue subcasting when casting an rvalue container 2017-07-05 12:27:14 -04:00
test_stl_binders.py Fix invalid memory access in vector insert method 2017-05-25 10:51:28 -04:00
test_stl.cpp Fix regression: container pointers not castable 2017-07-16 11:04:43 -04:00
test_stl.py Fix regression: container pointers not castable 2017-07-16 11:04:43 -04:00
test_virtual_functions.cpp Move tests from short translation units into their logical parents 2017-06-27 10:38:41 +02:00
test_virtual_functions.py Move tests from short translation units into their logical parents 2017-06-27 10:38:41 +02:00