unsigned sat_add (unsigned i) { unsigned ret = i + 1; if (ret < i) ret = i; return ret; } unsigned sat_add2 (unsigned i) { unsigned ret = i + 1; if (ret > i) return ret; return i; } unsigned sat_add3 (unsigned i) { unsigned ret = i - 1; if (ret > i) ret = i; return ret; } unsigned sat_add4 (unsigned i) { unsigned ret = i - 1; if (ret < i) return ret; return i; } main () { if (sat_add (~0U) != ~0U) abort (); if (sat_add2 (~0U) != ~0U) abort (); if (sat_add3 (0U) != 0U) abort (); if (sat_add4 (0U) != 0U) abort (); exit (0); }