/* { dg-do compile } */
/* { dg-options "-O2 -ftrapv -mcpu=ev4" } */

typedef struct tnode_t {
        struct tnode_t *tn_left, *tn_right;
        int v_quad;
} tnode_t;

int constant_addr(const tnode_t *, long *);
int constant_addr(const tnode_t *tn, long *offsp)
{
        long offs1 = 0, offs2 = 0;

        if (tn->v_quad > 0) {
                offs1 = tn->v_quad;
                return 0;
        } else if (tn->v_quad > -1) {
                offs2 = tn->tn_right->v_quad;
                if (!constant_addr(tn->tn_left, &offs1))
                        return 0;
        } else {
                return 0;
        }
        *offsp = offs1 + offs2;
        return 1;
}
