those fixes really don't seem right to me. the problem is in getival or its callers. somewhere along the way, ULONG_MAX is converted to double and then back to int (directly or indirectly). that yields a trap. now, in the case int x; x = (uint)d; the compiler is wrong to eliminate the cast, but then again, if x isn't uint that's not going to work properly anyway (since x will go negative for big enough values of d).
what's getival? there isn't one in the awk copies i can see.