Add -fgnuc-version= to control GNUC and other GCC macros
I noticed that compiling on Windows with -fno-ms-compatibility had the
side effect of defining GNUC, along with GNUG, GXX_RTTI, and
a number of other macros for GCC compatibility. This is undesirable and
causes Chromium to do things like mix attribute and __declspec,
which doesn't work. We should have a positive language option to enable
GCC compatibility features so that we can experiment with
-fno-ms-compatibility on Windows. This change adds -fgnuc-version= to be
My issue aside, users have, for a long time, reported that GNUC
doesn't match their expectations in one way or another. We have
encouraged users to migrate code away from this macro, but new code
continues to be written assuming a GCC-only environment. There's really
nothing we can do to stop that. By adding this flag, we can allow them
to choose their own adventure with GNUC.
This overlaps a bit with the "GNUMode" language option from -std=gnu*.
The gnu language mode tends to enable non-conforming behaviors that we'd
rather not enable by default, but the we want to set things like
GXX_RTTI by default, so I've kept these separate.
Helps address PR42817
Reviewed By: hans, nickdesaulniers, MaskRay
Differential Revision: https://reviews.llvm.org/D68055