This patch adds a new preprocessor extension `#pragma clang final`
which enables warning on undefinition and re-definition of macros.
The intent of this warning is to extend beyond `-Wmacro-redefined` to
warn against any and all alterations to macros that are marked final.
This warning is part of the `-Wpedantic-macros` diagnostics group.
What happens if the redefinition is to the same token sequence as the original definition? e.g.,