ext: Update Pybind to Version 2.10.3
Updating Pybind11 is necessary for gem5 to compile correctly with Python 3.11. As of March 9th 2023, 2.10.3 is the latest version of Pybind11. Change-Id: I32c68c507770040d3fac2de442d88a8f46b48896 Issue-on: https://gem5.atlassian.net/browse/GEM5-1295 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/68818 Maintainer: Jason Lowe-Power <power.jg@gmail.com> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
This commit is contained in:
committed by
Bobby Bruce
parent
b305019ac4
commit
07fca546e6
@@ -11,11 +11,7 @@
|
||||
|
||||
TEST_SUBMODULE(enums, m) {
|
||||
// test_unscoped_enum
|
||||
enum UnscopedEnum {
|
||||
EOne = 1,
|
||||
ETwo,
|
||||
EThree
|
||||
};
|
||||
enum UnscopedEnum { EOne = 1, ETwo, EThree };
|
||||
py::enum_<UnscopedEnum>(m, "UnscopedEnum", py::arithmetic(), "An unscoped enumeration")
|
||||
.value("EOne", EOne, "Docstring for EOne")
|
||||
.value("ETwo", ETwo, "Docstring for ETwo")
|
||||
@@ -23,10 +19,7 @@ TEST_SUBMODULE(enums, m) {
|
||||
.export_values();
|
||||
|
||||
// test_scoped_enum
|
||||
enum class ScopedEnum {
|
||||
Two = 2,
|
||||
Three
|
||||
};
|
||||
enum class ScopedEnum { Two = 2, Three };
|
||||
py::enum_<ScopedEnum>(m, "ScopedEnum", py::arithmetic())
|
||||
.value("Two", ScopedEnum::Two)
|
||||
.value("Three", ScopedEnum::Three);
|
||||
@@ -36,11 +29,7 @@ TEST_SUBMODULE(enums, m) {
|
||||
});
|
||||
|
||||
// test_binary_operators
|
||||
enum Flags {
|
||||
Read = 4,
|
||||
Write = 2,
|
||||
Execute = 1
|
||||
};
|
||||
enum Flags { Read = 4, Write = 2, Execute = 1 };
|
||||
py::enum_<Flags>(m, "Flags", py::arithmetic())
|
||||
.value("Read", Flags::Read)
|
||||
.value("Write", Flags::Write)
|
||||
@@ -50,14 +39,9 @@ TEST_SUBMODULE(enums, m) {
|
||||
// test_implicit_conversion
|
||||
class ClassWithUnscopedEnum {
|
||||
public:
|
||||
enum EMode {
|
||||
EFirstMode = 1,
|
||||
ESecondMode
|
||||
};
|
||||
enum EMode { EFirstMode = 1, ESecondMode };
|
||||
|
||||
static EMode test_function(EMode mode) {
|
||||
return mode;
|
||||
}
|
||||
static EMode test_function(EMode mode) { return mode; }
|
||||
};
|
||||
py::class_<ClassWithUnscopedEnum> exenum_class(m, "ClassWithUnscopedEnum");
|
||||
exenum_class.def_static("test_function", &ClassWithUnscopedEnum::test_function);
|
||||
@@ -67,19 +51,17 @@ TEST_SUBMODULE(enums, m) {
|
||||
.export_values();
|
||||
|
||||
// test_enum_to_int
|
||||
m.def("test_enum_to_int", [](int) { });
|
||||
m.def("test_enum_to_uint", [](uint32_t) { });
|
||||
m.def("test_enum_to_long_long", [](long long) { });
|
||||
m.def("test_enum_to_int", [](int) {});
|
||||
m.def("test_enum_to_uint", [](uint32_t) {});
|
||||
m.def("test_enum_to_long_long", [](long long) {});
|
||||
|
||||
// test_duplicate_enum_name
|
||||
enum SimpleEnum
|
||||
{
|
||||
ONE, TWO, THREE
|
||||
};
|
||||
enum SimpleEnum { ONE, TWO, THREE };
|
||||
|
||||
m.def("register_bad_enum", [m]() {
|
||||
py::enum_<SimpleEnum>(m, "SimpleEnum")
|
||||
.value("ONE", SimpleEnum::ONE) //NOTE: all value function calls are called with the same first parameter value
|
||||
.value("ONE", SimpleEnum::ONE) // NOTE: all value function calls are called with the
|
||||
// same first parameter value
|
||||
.value("ONE", SimpleEnum::TWO)
|
||||
.value("ONE", SimpleEnum::THREE)
|
||||
.export_values();
|
||||
@@ -90,33 +72,36 @@ TEST_SUBMODULE(enums, m) {
|
||||
enum class ScopedShortEnum : short {};
|
||||
enum class ScopedLongEnum : long {};
|
||||
enum UnscopedUInt64Enum : std::uint64_t {};
|
||||
static_assert(py::detail::all_of<
|
||||
std::is_same<py::enum_<UnscopedUCharEnum>::Scalar, unsigned char>,
|
||||
std::is_same<py::enum_<ScopedShortEnum>::Scalar, short>,
|
||||
std::is_same<py::enum_<ScopedLongEnum>::Scalar, long>,
|
||||
std::is_same<py::enum_<UnscopedUInt64Enum>::Scalar, std::uint64_t>
|
||||
>::value, "Error during the deduction of enum's scalar type with normal integer underlying");
|
||||
static_assert(
|
||||
py::detail::all_of<
|
||||
std::is_same<py::enum_<UnscopedUCharEnum>::Scalar, unsigned char>,
|
||||
std::is_same<py::enum_<ScopedShortEnum>::Scalar, short>,
|
||||
std::is_same<py::enum_<ScopedLongEnum>::Scalar, long>,
|
||||
std::is_same<py::enum_<UnscopedUInt64Enum>::Scalar, std::uint64_t>>::value,
|
||||
"Error during the deduction of enum's scalar type with normal integer underlying");
|
||||
|
||||
// test_enum_scalar_with_char_underlying
|
||||
enum class ScopedCharEnum : char { Zero, Positive };
|
||||
enum class ScopedWCharEnum : wchar_t { Zero, Positive };
|
||||
enum class ScopedCharEnum : char { Zero, Positive };
|
||||
enum class ScopedWCharEnum : wchar_t { Zero, Positive };
|
||||
enum class ScopedChar32Enum : char32_t { Zero, Positive };
|
||||
enum class ScopedChar16Enum : char16_t { Zero, Positive };
|
||||
|
||||
// test the scalar of char type enums according to chapter 'Character types'
|
||||
// from https://en.cppreference.com/w/cpp/language/types
|
||||
static_assert(py::detail::any_of<
|
||||
std::is_same<py::enum_<ScopedCharEnum>::Scalar, signed char>, // e.g. gcc on x86
|
||||
std::is_same<py::enum_<ScopedCharEnum>::Scalar, unsigned char> // e.g. arm linux
|
||||
>::value, "char should be cast to either signed char or unsigned char");
|
||||
static_assert(
|
||||
sizeof(py::enum_<ScopedWCharEnum>::Scalar) == 2 ||
|
||||
sizeof(py::enum_<ScopedWCharEnum>::Scalar) == 4
|
||||
, "wchar_t should be either 16 bits (Windows) or 32 (everywhere else)");
|
||||
static_assert(py::detail::all_of<
|
||||
std::is_same<py::enum_<ScopedChar32Enum>::Scalar, std::uint_least32_t>,
|
||||
std::is_same<py::enum_<ScopedChar16Enum>::Scalar, std::uint_least16_t>
|
||||
>::value, "char32_t, char16_t (and char8_t)'s size, signedness, and alignment is determined");
|
||||
py::detail::any_of<
|
||||
std::is_same<py::enum_<ScopedCharEnum>::Scalar, signed char>, // e.g. gcc on x86
|
||||
std::is_same<py::enum_<ScopedCharEnum>::Scalar, unsigned char> // e.g. arm linux
|
||||
>::value,
|
||||
"char should be cast to either signed char or unsigned char");
|
||||
static_assert(sizeof(py::enum_<ScopedWCharEnum>::Scalar) == 2
|
||||
|| sizeof(py::enum_<ScopedWCharEnum>::Scalar) == 4,
|
||||
"wchar_t should be either 16 bits (Windows) or 32 (everywhere else)");
|
||||
static_assert(
|
||||
py::detail::all_of<
|
||||
std::is_same<py::enum_<ScopedChar32Enum>::Scalar, std::uint_least32_t>,
|
||||
std::is_same<py::enum_<ScopedChar16Enum>::Scalar, std::uint_least16_t>>::value,
|
||||
"char32_t, char16_t (and char8_t)'s size, signedness, and alignment is determined");
|
||||
#if defined(PYBIND11_HAS_U8STRING)
|
||||
enum class ScopedChar8Enum : char8_t { Zero, Positive };
|
||||
static_assert(std::is_same<py::enum_<ScopedChar8Enum>::Scalar, unsigned char>::value);
|
||||
|
||||
Reference in New Issue
Block a user