define PYBIND11_DETAIL_ODR_GUARD_IMPL_THROW_DISABLED true in test_odr_guard_1,2.cpp

This commit is contained in:
Ralf W. Grosse-Kunstleve 2022-06-21 19:22:28 -07:00
parent a34771aeda
commit 6a6eb6cac8
5 changed files with 17 additions and 14 deletions

View File

@ -25,11 +25,8 @@
#include <iterator> #include <iterator>
#include <memory> #include <memory>
#include <string> #include <string>
#include <system_error>
#include <tuple> #include <tuple>
#include <type_traits> #include <type_traits>
#include <typeindex>
#include <unordered_map>
#include <utility> #include <utility>
#include <vector> #include <vector>
@ -60,7 +57,8 @@ struct type_caster_odr_guard : type_caster<IntrinsicType> {
template <typename IntrinsicType> template <typename IntrinsicType>
int type_caster_odr_guard<IntrinsicType>::translation_unit_local = []() { int type_caster_odr_guard<IntrinsicType>::translation_unit_local = []() {
odr_guard_impl<IntrinsicType>(std::type_index(typeid(IntrinsicType)), odr_guard_impl<IntrinsicType>(std::type_index(typeid(IntrinsicType)),
type_caster<IntrinsicType>::source_file_line.text); type_caster<IntrinsicType>::source_file_line.text,
PYBIND11_DETAIL_ODR_GUARD_IMPL_THROW_DISABLED);
return 0; return 0;
}(); }();

View File

@ -302,7 +302,6 @@
#define PYBIND11_TRY_NEXT_OVERLOAD ((PyObject *) 1) // special failure return code #define PYBIND11_TRY_NEXT_OVERLOAD ((PyObject *) 1) // special failure return code
#define PYBIND11_STRINGIFY(x) #x #define PYBIND11_STRINGIFY(x) #x
#define PYBIND11_TOSTRING(x) PYBIND11_STRINGIFY(x) #define PYBIND11_TOSTRING(x) PYBIND11_STRINGIFY(x)
#define PYBIND11_SOURCE_FILE_LINE __FILE__ ":" PYBIND11_TOSTRING(__LINE__)
#define PYBIND11_CONCAT(first, second) first##second #define PYBIND11_CONCAT(first, second) first##second
#define PYBIND11_ENSURE_INTERNALS_READY pybind11::detail::get_internals(); #define PYBIND11_ENSURE_INTERNALS_READY pybind11::detail::get_internals();

View File

@ -55,8 +55,14 @@ inline const char *source_file_line_basename(const char *sfl) {
return sfl + i_base; return sfl + i_base;
} }
# ifndef PYBIND11_DETAIL_ODR_GUARD_IMPL_THROW_DISABLED
# define PYBIND11_DETAIL_ODR_GUARD_IMPL_THROW_DISABLED false
# endif
template <typename IntrinsicType> template <typename IntrinsicType>
bool odr_guard_impl(const std::type_index &it_ti, const char *source_file_line) { void odr_guard_impl(const std::type_index &it_ti,
const char *source_file_line,
bool throw_disabled) {
// std::cout cannot be used here: static initialization could be incomplete. // std::cout cannot be used here: static initialization could be incomplete.
# define PYBIND11_DETAIL_ODR_GUARD_IMPL_PRINTF_OFF # define PYBIND11_DETAIL_ODR_GUARD_IMPL_PRINTF_OFF
# ifdef PYBIND11_DETAIL_ODR_GUARD_IMPL_PRINTF_ON # ifdef PYBIND11_DETAIL_ODR_GUARD_IMPL_PRINTF_ON
@ -77,15 +83,13 @@ bool odr_guard_impl(const std::type_index &it_ti, const char *source_file_line)
+ type_id<IntrinsicType>() + ">: SourceLocation1=\"" + type_id<IntrinsicType>() + ">: SourceLocation1=\""
+ reg_iter->second + "\", SourceLocation2=\"" + source_file_line + reg_iter->second + "\", SourceLocation2=\"" + source_file_line
+ "\""); + "\"");
# define PYBIND11_TYPE_CASTER_ODR_GUARD_THROW_OFF if (throw_disabled) {
# ifdef PYBIND11_TYPE_CASTER_ODR_GUARD_THROW_ON fprintf(stderr, "\nDISABLED std::system_error: %s\n", err.what());
throw err; fflush(stderr);
# else } else {
fprintf(stderr, "\nDISABLED std::system_error: %s\n", err.what()); throw err;
fflush(stderr); }
# endif
} }
return true;
} }
namespace { namespace {

View File

@ -1,3 +1,4 @@
#define PYBIND11_DETAIL_ODR_GUARD_IMPL_THROW_DISABLED true
#include "pybind11_tests.h" #include "pybind11_tests.h"
namespace mrc_ns { // minimal real caster namespace mrc_ns { // minimal real caster

View File

@ -1,3 +1,4 @@
#define PYBIND11_DETAIL_ODR_GUARD_IMPL_THROW_DISABLED true
#include "pybind11_tests.h" #include "pybind11_tests.h"
namespace mrc_ns { // minimal real caster namespace mrc_ns { // minimal real caster