Hi all,
I'm trying to see a way forward for PR 42954: when preprocessing Fortran source
files, we used to call the C preprocessor and run the Fortran compiler on the
generated file. We now use libcpp directly, but by doing so, we have lost a
good number of target-dependent CPP builtins that are defined via
TARGET_OS_CPP_BUILTINS and TARGET_CPU_CPP_BUILTINS macros. These macros were
used in real-life code (including mine!) for conditional compilation, and the
new behaviour is a regression.
The reason these macros can't be used directly can be seen on the example of
config/sol2.h:
#define TARGET_OS_CPP_BUILTINS() \
do { \
builtin_define_std ("unix"); \
builtin_define_std ("sun"); \
/* For C++ we need to add some additional macro \
definitions required by the C++ standard \
library. */ \
if (c_dialect_cxx ()) \
{ \
builtin_define ("__STDC_VERSION__=199901L");\
builtin_define ("_XOPEN_SOURCE=600"); \
} \
TARGET_SUB_OS_CPP_BUILTINS(); \
} while (0)
(I've removed a few lines, but you get the idea.)
Calling c_dialect_cxx() is not going to work in the Fortran front-end, as this
is a function defined in c-family/c-common.h, which we don't include (and don't
want to include!). Other such problematic functions or variables include
flag_isoc99, flag_iso, flag_leading_underscore (see full list at
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42954).
How can we fix this? The only way I see would be to have two macros instead of
TARGET_OS_CPP_BUILTINS: one that will be used for source-preprocessing in all
languages (maybe keeping the name TARGET_OS_CPP_BUILTINS), and one that will be
used only for C-family languages (TARGET_OS_CPP_BUILTINS_CFAMILY). It seems
like a bit of work, to get everything in the right place. However, I don't
really see an alternative solution, which is why I'm writing here: would there
be any easier solution? Or one that makes more sense to you?
As this is a major change, I'd like to get this in before the end of stage1,
probably submitting it next week-end, if we can agree on a path for me to
implement.
Thanks for the help!
FX