Add -fgnuc-version= to control __GNUC__ and other GCC macros

Authored by rnk on Oct 10 2019, 2:04 PM.


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
that option.

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

llvm-svn: 374449


rnkOct 10 2019, 2:04 PM
Differential Revision
D68055: Add -fgnuc-version= to control __GNUC__ and other GCC macros
rG53a53e63c85e: Add a missing include in test.