summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Harris <charlesr.harris@gmail.com>2021-11-25 18:42:24 -0700
committerGitHub <noreply@github.com>2021-11-25 18:42:24 -0700
commit157ee4f58d6f9f9c63ee7fdedf581785a7c51ec3 (patch)
treebae7b6ff41bbe260bf35e0bbd309d258523b6105
parent87d6f96d7f107ced83eded0a04ec6519bef27448 (diff)
parent75fd6a71faddc10dad477cc60bf594d6a714f220 (diff)
downloadnumpy-157ee4f58d6f9f9c63ee7fdedf581785a7c51ec3.tar.gz
Merge pull request #20466 from charris/backport-20365
BUG: Fix failure to create aligned, empty structured dtype
-rw-r--r--numpy/core/src/multiarray/descriptor.c2
-rw-r--r--numpy/core/tests/test_dtype.py6
2 files changed, 7 insertions, 1 deletions
diff --git a/numpy/core/src/multiarray/descriptor.c b/numpy/core/src/multiarray/descriptor.c
index b8b477e5d..fa24f1a87 100644
--- a/numpy/core/src/multiarray/descriptor.c
+++ b/numpy/core/src/multiarray/descriptor.c
@@ -1325,7 +1325,7 @@ _convert_from_dict(PyObject *obj, int align)
goto fail;
}
/* If align is set, make sure the alignment divides into the size */
- if (align && itemsize % new->alignment != 0) {
+ if (align && new->alignment > 0 && itemsize % new->alignment != 0) {
PyErr_Format(PyExc_ValueError,
"NumPy dtype descriptor requires alignment of %d bytes, "
"which is not divisible into the specified itemsize %d",
diff --git a/numpy/core/tests/test_dtype.py b/numpy/core/tests/test_dtype.py
index 1dcf1fb8e..3cb0c2b84 100644
--- a/numpy/core/tests/test_dtype.py
+++ b/numpy/core/tests/test_dtype.py
@@ -621,6 +621,12 @@ class TestSubarray:
t2 = np.dtype('2i4', align=True)
assert_equal(t1.alignment, t2.alignment)
+ def test_aligned_empty(self):
+ # Mainly regression test for gh-19696: construction failed completely
+ dt = np.dtype([], align=True)
+ assert dt == np.dtype([])
+ dt = np.dtype({"names": [], "formats": [], "itemsize": 0}, align=True)
+ assert dt == np.dtype([])
def iter_struct_object_dtypes():
"""