Iain Sandoe <iains....@gmail.com> writes:

> Tested on x86_64, powerpc64 - linux-gnu (with 32b multilibs),
> i686, powerpc darwin (with 64b multilibs) x86_64 darwin (with and without
> 32b multilib).
> OK for trunk?
> thanks
> Iain
>
> --- 8< ---
>
> Modula-2 uses the C preprocessor to implement handling for conditional
> code and macros.  However, this is not done directly, because the process
> is applied recursively to imported definitions and modules.
>
> The cc1gm2 executable records the parameters as a template command line
> needed to create a composite 'cc1 -E' for each file to be preprocessed
> starting with the main file from the original command line.
>
> This patch fixes the capture of the C preprocessor template to include
> the target information needed for correct multilib operation.
>
> In order to match the existing semantics of '-E, -M and -MM' these have
> to be handled as a 'pre-processor only' job (i.e. the recursion is omitted
> and only the main file is processed).
>
> Whereas C-family front ends always pre-process, Modula-2 only does so
> when specifically requested (via the -fcpp option).
>
> '-MD, -MMD and -MQ' also require special handling, since (in principle)
> these options can be applied to any command line (with -fcpp) providing
> dependency information as a by-product.
>
> TODO: the preprocessor is not able to determine def and mod dependencies
> for Modula-2 and so the output of this only shows the object to module
> dep.  We should be able to append the .def and .mod dependencies.
>
> The patch amends save-temps handling to cater for the preprocessor
> recursion and to avoid writing saved files into the source directories.
>
> The patch changes the extension for Modula-2 preprocessed source to .m2i
> to avoid clashes with .i.
>
> The main driver code is amended to add default handlers for .mod and .m2i
> so that a useful error message will be emitted if the Modula-2 compiler
> is not built-in.
>
> The compiler will now also handle code generation from a .m2i preprocessed
> source.
>
> TODO: We should not need to pass the '-c' option to the compiler to alter
> the processing of init code.
>
> Signed-off-by: Iain Sandoe <i...@sandoe.co.uk>
>
>       PR modula2/102343
>       PR modula2/108182
>
> gcc/ChangeLog:
>
>       * gcc.cc: Provide default specs for Modula-2 so that when the
>       language is not built-in better diagnostics are emitted for
>       attempts to use .mod or .m2i file extensions.
>
> gcc/m2/ChangeLog:
>
>       * gm2-compiler/M2Comp.mod: Early exit for pre-processor-only jobs.
>       * gm2-compiler/M2Options.def (SetPPOnly, GetPPOnly, SetMD, GetMD,
>       SetMMD, GetMMD, SetMQ, GetMQ, SetObj, GetObj, SetDumpDir,
>       GetDumpDir):New.
>       * gm2-compiler/M2Options.mod:(SetPPOnly, GetPPOnly, SetMD, GetMD,
>       SetMMD, GetMMD, SetMQ, GetMQ, SetObj, GetObj, SetDumpDir,
>       GetDumpDir):New.
>       * gm2-compiler/M2Preprocess.def (PreprocessModule): Add flag to
>       indicate the main file.
>       * gm2-compiler/M2Preprocess.mod: Handle Preprocess-only jobs,
>       handle MD, MMD and MQ options.
>       * gm2-gcc/m2options.h (M2Options_SetPPOnly, M2Options_GetPPOnly,
>       M2Options_SetDumpDir, M2Options_SetMD, M2Options_GetMD,
>       M2Options_SetMMD, M2Options_GetMMD, M2Options_SetMQ, M2Options_GetMQ,
>       M2Options_SetObj, M2Options_GetObj): New.
>       * gm2-gcc/m2type.cc (m2type_InitBaseTypes): Early exit for pre-
>       processor-only jobs.
>       * gm2-lang.cc (gm2_langhook_init): Handle preprocess-only commands.
>       (gm2_langhook_option_lang_mask): Claim C and Driver options so that
>       we can intercept them for building pre-processor commands.
>       (gm2_langhook_init_options): Collect the preprocessor line here.
>       Save options that have different actions for preprocessor and compile
>       commands.
>       (gm2_langhook_handle_option): Only handle the modula-2 options here.
>       (gm2_langhook_post_options): Do not create a back-end for pre-
>       processor-only jobs.
>       * gm2spec.cc (lang_specific_driver): Ignore PCH options, append a
>       scaffold-main for cases where we are building a main module with
>       -c.
>       * lang-specs.h: Revise to handle preprocessor-only jobs and to
>       consume pre-processed files.
>       * lang.opt: Remove Driver and C options copies (we claim these
>       separately).


Hi Iain,

yes LGTM - thanks for the fixes and it is great to have the ability for
gm2 to handle preprocessed source

regards,
Gaius

Reply via email to