New submission from Larry Hastings: I'm monkeying around with CPython trunk, and just noticed the following declaration in Objects/dictobject.c:
static PyObject * dict_contains(register PyDictObject *mp, PyObject *key) Although dict_contains is a static method, it's cast to PyCFunction and stored in the methoddef array for the dict class. Therefore it must be callable when cast to a PyCFunction--indeed, that's the only way it is ever called. Although the "register" keyword is at best a vague hope, surely it'd be bad news if our wish was granted? The first argument to the PyCFunction typedef is *not* declared register. So if the caller pushed the first argument on the stack, and dict_contains went looking for its first argument in a register... kablooey. Surely we must remove the "register" keyword to this function, and similarly clean up all other functions ever cast to PyCFunction or PyCFunctionWithKeywords. The "register" keyword isn't just a euphemism for "I want this code to go faster" -ly yours, ---------- components: Interpreter Core messages: 190263 nosy: larry priority: low severity: normal stage: needs patch status: open title: dict_contains first argument declared register, and shouldn't be type: behavior versions: Python 3.4 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue18090> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com