The condition
if ((1+*ps)=='z') .....
not have the same behavior of
if ((1+*ps)=='b') .....
In the very simple attached file, you can reproduce it.
for to reproduce, you will change 2 rows:
1) row 38 with row 37
2) row 30 with row 29
There is also a log file, so you can see how i compile it.
Other info:
$ lsb_release -rd
Description: Ubuntu 9.04
Release: 9.04
--
Summary: g++ : char not find by pointer
Product: gcc
Version: 4.3.3
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: lxcc dot it dot gg at email dot it
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41319