Fix msan failure in __repr__ when upgraded to NumPy 1.24.
PiperOrigin-RevId: 505661236 Change-Id: I37ea339679870d23886e3c95f51451349fa1de2c
This commit is contained in:
committed by
Copybara-Service
parent
929e09f84a
commit
f1af86cf82
@@ -808,6 +808,25 @@ using MjvFigureWrapper = MjWrapper<raw::MjvFigure>;
|
||||
|
||||
template <>
|
||||
struct enable_if_mj_struct<raw::MjvFigure> { using type = void; };
|
||||
|
||||
#ifdef MEMORY_SANITIZER
|
||||
template <typename T>
|
||||
class ScopedMsanDisabler {
|
||||
public:
|
||||
ScopedMsanDisabler(T* mj)
|
||||
: mj_(mj), shadow_(std::malloc(mj_->nbuffer)) {
|
||||
__msan_copy_shadow(shadow_, mj_->buffer, mj_->nbuffer);
|
||||
__msan_unpoison(mj_->buffer, mj_->nbuffer);
|
||||
}
|
||||
~ScopedMsanDisabler() {
|
||||
__msan_copy_shadow(mj_->buffer, shadow_, mj_->nbuffer);
|
||||
std::free(shadow_);
|
||||
}
|
||||
private:
|
||||
T* mj_;
|
||||
void* shadow_;
|
||||
};
|
||||
#endif
|
||||
} // namespace _impl
|
||||
|
||||
template <typename T>
|
||||
@@ -1078,6 +1097,24 @@ std::string StructRepr(pybind11::object self) {
|
||||
return result.str();
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
std::string MjModelStructRepr(pybind11::object self) {
|
||||
#ifdef MEMORY_SANITIZER
|
||||
_impl::ScopedMsanDisabler<raw::MjModel> msan_disabler(
|
||||
pybind11::cast<T&>(self).ptr());
|
||||
#endif
|
||||
return StructRepr<T>(self);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
std::string MjDataStructRepr(pybind11::object self) {
|
||||
#ifdef MEMORY_SANITIZER
|
||||
_impl::ScopedMsanDisabler<raw::MjData> msan_disabler(
|
||||
pybind11::cast<T&>(self).ptr());
|
||||
#endif
|
||||
return StructRepr<T>(self);
|
||||
}
|
||||
|
||||
template <typename C, typename... O>
|
||||
void DefineStructFunctions(pybind11::class_<C, O...> c) {
|
||||
c.def("__eq__", StructsEqual<C>);
|
||||
|
||||
Reference in New Issue
Block a user