Skip to content

incompatible behaviour between 3.12.0rc1 and previous versions in ctypes #107940

Description

@mattip

Bug report

Testing out 3.12.0rc1 on NumPy, we came across numpy/numpy#24399. I have distilled this down to a reproducer that fails on 3.12.0rc1, but passes on previous versions.

Checklist

  • I am confident this is a bug in CPython, not a bug in a third-party project
  • I have searched the CPython issue tracker, and am confident this bug has not been reported before

A clear and concise description of the bug

fromctypesimportStructure, pointer, c_int16, cast, POINTERclassStruct(Structure):
_fields_= [('a', c_int16)]
Struct3=3*Structc_array= (2*Struct3)(
Struct3(Struct(a=1), Struct(a=2), Struct(a=3)),
Struct3(Struct(a=4), Struct(a=5), Struct(a=6))
)
assertc_array[0][0].a==1p_obj=cast(pointer(c_array), POINTER(pointer(c_array)._type_))
obj=p_obj.contents# Works on 3.12, obj is 2dassertobj[0][0].a==1p_obj=cast(pointer(c_array[0]), POINTER(pointer(c_array)._type_))
obj=p_obj.contents# Fails on 3.12.0rc1, but works on 3.11 and earlier: obj is not 2dassertobj[0][0].a==1

Your environment

  • CPython versions tested on: 3.12rc1
  • Operating system and architecture: ubuntu 22.04

Edit: 3.12rc1 -> 3.12.0rc1

Linked PRs

Metadata

Metadata

Assignees

Labels

Projects

Status
Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions