------- Comment #2 from rguenth at gcc dot gnu dot org 2007-10-02 11:48 ------- Reduced testcase:
typedef int GBool; class GString { }; class XRef; struct Ref { }; enum ObjType { objBool, objInt, objReal, objString, objName, objNull, objArray, objDict, objStream, objRef, objCmd, objError, objEOF, objNone }; class Object { public: GBool isInt() { } GBool isNum() { } GBool isArray() { return type == objArray; } int getInt() { } double getNum() { return type == objInt ? (double)intg : real; } int arrayGetLength(); Object *arrayGet(int i, Object *obj); ObjType type; union { int intg; double real; }; }; class Dict { public: Object *lookup(char *key, Object *obj); }; typedef unsigned int CID; struct GfxFontCIDWidthExcepV { CID first; CID last; double height; double vx, vy; }; struct GfxFontCIDWidths { GfxFontCIDWidthExcepV * excepsV; int nExcepsV; }; class GfxFont { public: GfxFont(char *tagA, Ref idA, GString *nameA); }; class GfxCIDFont: public GfxFont { GfxCIDFont(XRef *xref, char *tagA, Ref idA, GString *nameA, Dict *fontDict); GfxFontCIDWidths widths; }; GfxCIDFont::GfxCIDFont(XRef *xref, char *tagA, Ref idA, GString *nameA, Dict *fontDict): GfxFont(tagA, idA, nameA) { Dict *desFontDict; Object obj1, obj2, obj3, obj4, obj5, obj6; int excepsSize, i, j, k, n; if (desFontDict->lookup("W2", &obj1)->isArray()) { while (i + 1 < obj1.arrayGetLength()) { if (obj2.isInt() && obj3.isInt() && i + 4 < obj1.arrayGetLength()) { if (obj1.arrayGet(i + 2, &obj4)->isNum() && obj1.arrayGet(i + 3, &obj5)->isNum() && obj1.arrayGet(i + 4, &obj6)->isNum()) { widths.excepsV[widths.nExcepsV].last = obj3.getInt(); widths.excepsV[widths.nExcepsV].height = obj4.getNum() * 0.001; } } } } } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33624