Re: strange failure in plpgsql_control tests (on fulmar, ICC 14.0.3) - Mailing list pgsql-hackers

From Tom Lane
Subject Re: strange failure in plpgsql_control tests (on fulmar, ICC 14.0.3)
Date
Msg-id 14427.1521298600@sss.pgh.pa.us
Whole thread Raw
In response to Re: strange failure in plpgsql_control tests (on fulmar, ICC 14.0.3)  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: strange failure in plpgsql_control tests (on fulmar, ICC 14.0.3)  (Andres Freund <andres@anarazel.de>)
List pgsql-hackers
I wrote:
> Ouch.  That test is in fact new as of 31 Dec, and what this seems to
> prove is that plpgsql's handling of loop-variable overflow doesn't
> work on fulmar.

Some of the other icc-using critters haven't reported in since
December, either :-(

Looking at the code, we do this like so:

        /*
         * Increase/decrease loop value, unless it would overflow, in which
         * case exit the loop.
         */
        if (stmt->reverse)
        {
            if ((int32) (loop_value - step_value) > loop_value)
                break;
            loop_value -= step_value;
        }
        else
        {
            if ((int32) (loop_value + step_value) < loop_value)
                break;
            loop_value += step_value;
        }

I imagine what's happening is that the compiler is assuming no overflow
occurs (due to lacking any equivalent of -fwrapv), then deducing that the
if-tests are no-ops and throwing them away.

We could avoid the dependency on -fwrapv with something like

        if (stmt->reverse)
        {
            if (loop_value < (PG_INT32_MIN + step_value))
                break;
            loop_value -= step_value;
        }
        else
        {
            if (loop_value > (PG_INT32_MAX - step_value))
                break;
            loop_value += step_value;
        }

which is safe because we enforce step_value > 0.  It's kind of ugly
because it hard-codes knowledge of what the limits are, but we may not
have much choice.

            regards, tom lane


pgsql-hackers by date:

Previous
From: Tomas Vondra
Date:
Subject: Re: strange failure in plpgsql_control tests (on fulmar, ICC 14.0.3)
Next
From: "David G. Johnston"
Date:
Subject: Re: Problems with Error Messages wrt Domains, Checks