Fix bug #46311: Pointer aliasing issue results in miscompile on gcc4.4

The code violated the strict aliasing restriction, because it
dereferenced the same pointer as zval** once and as void**
afterwards. Now both occurances dereference void** and cast to
zval* in the former case.