Pastey Bad loop translation ticket 835

function pow_sum(sequence s) 
	atom sum = 0 
	for i = 1 to length(s) by 2 do 
		atom p = 1 
		while s[i+1] > 0 do 
			p *= s[i] 
			s[i+1] -= 1 
		end while 
		sum += p 
	end for 
	return sum 
end function 

object _1pow_sum(object _s_14757) 
{ 
    object _sum_14758 = NOVALUE; 
    object _p_14762 = NOVALUE; 
    object _8294 = NOVALUE; 
    object _8293 = NOVALUE; 
    object _8292 = NOVALUE; 
    object _8290 = NOVALUE; 
    object _8288 = NOVALUE; 
    object _8287 = NOVALUE; 
    object _8286 = NOVALUE; 
    object _0, _1, _2; 
     
 
    /** t_callc.e:79		atom sum = 0*/ 
    DeRef(_sum_14758); 
    _sum_14758 = 0; 
 
    /** t_callc.e:80		for i = 1 to length(s) by 2 do*/ 
    _8286 = 1; 
    { 
        object _i_14760; 
        _i_14760 = 1; 
L1:  
        if (_i_14760 > 1){ 
            goto L2; // [13] 90 
        } 
 
        /** t_callc.e:81			atom p = 1*/ 
        DeRef(_p_14762); 
        _p_14762 = 1; 
 
        /** t_callc.e:82			while s[i+1] > 0 do*/ 
L3:  
        _8287 = 2; 
        _2 = (object)SEQ_PTR(_s_14757); 
        _8288 = (object)*(((s1_ptr)_2)->base + 2); 
        if (binary_op_a(LESSEQ, _8288, 0)){ 
            _8288 = NOVALUE; 
            goto L4; // [38] 75 
        } 
        _8288 = NOVALUE; 
 
        /** t_callc.e:83				p *= s[i]*/ 
        _2 = (object)SEQ_PTR(_s_14757); 
        _8290 = (object)*(((s1_ptr)_2)->base + 1); 
        _0 = _p_14762; 
        if (IS_ATOM_INT(_p_14762) && IS_ATOM_INT(_8290)) { 
            if (_p_14762 == (short)_p_14762 && _8290 <= INT15 && _8290 >= -INT15){ 
                _p_14762 = _p_14762 * _8290; 
            } 
            else{ 
                _p_14762 = NewDouble(_p_14762 * (eudouble)_8290); 
            } 
        } 
        else { 
            _p_14762 = binary_op(MULTIPLY, _p_14762, _8290); 
        } 
        DeRef(_0); 
        _8290 = NOVALUE; 
 
        /** t_callc.e:84				s[i+1] -= 1*/ 
        _8292 = 2; 
        _2 = (object)SEQ_PTR(_s_14757); 
        _8293 = (object)*(((s1_ptr)_2)->base + 2); 
        if (IS_ATOM_INT(_8293)) { 
            _8294 = _8293 - 1; 
            if ((object)((uintptr_t)_8294 +(uintptr_t) HIGH_BITS) >= 0){ 
                _8294 = NewDouble((eudouble)_8294); 
            } 
        } 
        else { 
            _8294 = binary_op(MINUS, _8293, 1); 
        } 
        _8293 = NOVALUE; 
        _2 = (object)SEQ_PTR(_s_14757); 
        if (!UNIQUE(_2)) { 
            _2 = (object)SequenceCopy((s1_ptr)_2); 
            _s_14757 = MAKE_SEQ(_2); 
        } 
        _2 = (object)(((s1_ptr)_2)->base + 2); 
        _1 = *(intptr_t *)_2; 
        *(intptr_t *)_2 = _8294; 
        if( _1 != _8294 ){ 
            DeRef(_1); 
        } 
        _8294 = NOVALUE; 
 
        /** t_callc.e:85			end while*/ 
        goto L3; // [72] 30 
L4:  
 
        /** t_callc.e:86			sum += p*/ 
        _0 = _sum_14758; 
        if (IS_ATOM_INT(_sum_14758) && IS_ATOM_INT(_p_14762)) { 
            _sum_14758 = _sum_14758 + _p_14762; 
            if ((object)((uintptr_t)_sum_14758 + (uintptr_t)HIGH_BITS) >= 0){ 
                _sum_14758 = NewDouble((eudouble)_sum_14758); 
            } 
        } 
        else { 
            if (IS_ATOM_INT(_sum_14758)) { 
                _sum_14758 = NewDouble((eudouble)_sum_14758 + DBL_PTR(_p_14762)->dbl); 
            } 
            else { 
                if (IS_ATOM_INT(_p_14762)) { 
                    _sum_14758 = NewDouble(DBL_PTR(_sum_14758)->dbl + (eudouble)_p_14762); 
                } 
                else 
                _sum_14758 = NewDouble(DBL_PTR(_sum_14758)->dbl + DBL_PTR(_p_14762)->dbl); 
            } 
        } 
        DeRef(_0); 
        DeRef(_p_14762); 
        _p_14762 = NOVALUE; 
 
        /** t_callc.e:87		end for*/ 
        _i_14760 = 1 + 2; 
        goto L1; // [85] 20 
L2:  
        ; 
    } 
 
    /** t_callc.e:88		return sum*/ 
    DeRefDS(_s_14757); 
    DeRef(_8287); 
    _8287 = NOVALUE; 
    DeRef(_8292); 
    _8292 = NOVALUE; 
    return _sum_14758; 
    ; 
}