Converting a pointer to an integer whose result cannot represented in the integer type is undefined behavior is C and prohibited in C++. C++ already has a diagnostic when casting. This adds a diagnostic for C.
The diagnostic is not enabled by default due to the number of diagnostics it triggered while running the tests.
Since this diagnostic uses the range of the conversion it also modifies int-to-pointer-cast diagnostic to use a range.
Fixes PR8718: No warning on casting between pointer and non-pointer-sized int
clang-format: please reformat the code