Use -cpp= for Fortran -cpp option passed to f951
Richard Guenther
richard.guenther@gmail.com
Thu Jul 29 09:52:00 GMT 2010
On Thu, Jul 29, 2010 at 1:31 AM, Joseph S. Myers
<joseph@codesourcery.com> wrote:
> I think my option handling patch series is now quite close to being
> able to make the driver share the option processing machinery of the
> core compilers.
>
> There are of course options accepted by the driver but not the core
> compilers, or by the core compilers but not the driver. This is not
> in itself a problem - the machinery already handles options known to
> one front end but not another, and this is a similar case. Indeed,
> almost all options for any of the core compilers should be accepted by
> the driver (and passed down via specs), while if a driver-only option
> is passed to cc1 it seems quite appropriate to warn or error that it
> is driver-only, like the existing warnings for other-front-end
> options.
>
> More of a problem, however, is options that are incompatible between
> the driver and the core compilers regarding whether they take
> arguments; adding support for such variations in option semantics
> seems like an undesirable complication, given that the interface to
> the core compilers is a purely internal matter that we can change for
> implementation convenience.
>
> Thus, I have reviewed all 71 options files for options with such
> incompatibilities. Several oddities have come to light that are clear
> bugs that I will fix in due course, plus two clear incompatibilities
> that need addressing before the option-processing machinery can be
> shared:
>
> * The Fortran -cpp option takes no argument as an option to the
> driver, but takes an argument as an option to f951.
>
> * common.opt unconditionally supports the -G option (-Gn and -G n,
> small data size). This option is passed down by specs on some but
> not all targets, and SWITCH_TAKES_ARG controls whether the driver
> thinks -G has an argument on a given target. On some targets not
> passing it to cc1, there is instead a -G option with no argument
> that specs pass to the *linker*, which is of course incompatible
> with the driver knowing about the -G option from common.opt on such
> systems.
>
> This patch fixes the first of these issues, by changing the internal
> -cpp option to -cpp= taking a joined argument. As a side-effect, the
> Negative markers on -cpp (public option to the driver, no argument)
> and -nocpp will now be effective (prune_options ignores all options
> marked Joined, so the Negative markers would not previously have done
> anything).
>
> Bootstrapped with no regressions on x86_64-unknown-linux-gnu. OK to
> commit?
Together with LTO we see issues when frontend specific arguments
are passed down to lto1, like the fortran frontend -ffixed-* args
which conflicts with the common -ffixed-X. Like PRs 41844.
Is there a chance, with your changes, to filter out all frontend
handled options when generating COLLECT_GCC_OPTIONS?
Richard.
> 2010-07-28 Joseph Myers <joseph@codesourcery.com>
>
> * lang.opt (cpp): Remove Joined and Separate markers.
> (cpp=): New internal option.
> * lang-specs.h (F951_CPP_OPTIONS): Generate -cpp= option.
> * cpp.c (gfc_cpp_handle_option): Handle OPT_cpp_ instead of
> OPT_cpp.
>
> Index: gcc/fortran/cpp.c
> ===================================================================
> --- gcc/fortran/cpp.c (revision 162620)
> +++ gcc/fortran/cpp.c (working copy)
> @@ -354,7 +354,7 @@ gfc_cpp_handle_option (size_t scode, con
> result = 0;
> break;
>
> - case OPT_cpp:
> + case OPT_cpp_:
> gfc_cpp_option.temporary_filename = arg;
> break;
>
> Index: gcc/fortran/lang.opt
> ===================================================================
> --- gcc/fortran/lang.opt (revision 162620)
> +++ gcc/fortran/lang.opt (working copy)
> @@ -173,9 +173,13 @@ Fortran Warning
> Warn about unused dummy arguments.
>
> cpp
> -Fortran Joined Separate Negative(nocpp)
> +Fortran Negative(nocpp)
> Enable preprocessing
>
> +cpp=
> +Fortran Joined Negative(nocpp) Undocumented
> +; Internal option generated by specs from -cpp.
> +
> nocpp
> Fortran Negative(cpp)
> Disable preprocessing
> Index: gcc/fortran/lang-specs.h
> ===================================================================
> --- gcc/fortran/lang-specs.h (revision 162620)
> +++ gcc/fortran/lang-specs.h (working copy)
> @@ -1,6 +1,6 @@
> /* Contribution to the specs for the GNU Compiler Collection
> from GNU Fortran 95 compiler.
> - Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008
> + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010
> Free Software Foundation, Inc.
>
> This file is free software; you can redistribute it and/or modify
> @@ -30,7 +30,7 @@
> /* Options that f951 should know about, even if not preprocessing. */
> #define CPP_FORWARD_OPTIONS "%{i*} %{I*} %{M*}"
>
> -#define F951_CPP_OPTIONS "%{!nocpp: -cpp %g.f90 %{E} %(cpp_unique_options) \
> +#define F951_CPP_OPTIONS "%{!nocpp: -cpp=%g.f90 %{E} %(cpp_unique_options) \
> %{E|M|MM:%(cpp_debug_options) " CPP_ONLY_OPTIONS \
> " -fsyntax-only};: " CPP_FORWARD_OPTIONS "}"
> #define F951_OPTIONS "%(cc1_options) %{J*} \
>
> --
> Joseph S. Myers
> joseph@codesourcery.com
>
More information about the Gcc-patches
mailing list