Except in Go, types are defined using modular 2s complement. Overflow is not considered a problem, it's a feature that code depends on.
The spec says:
> For signed integers, the operations +, -, , /, and << may legally overflow and the resulting value exists and is deterministically defined by …*
It does not go on to define the overflow values; that gets to be implementation defined.
This is in contrast to unsigned integers, which the spec does precisely define overflow for.
Overflow flags are supported on some architectures, so it would really just be a matter of checking that flag.