[PING, PATCH] fortran: fix -MT/-MQ adding additional target [PR47485]

Jerry D jvdelisle2@gmail.com
Tue Feb 4 17:29:12 GMT 2025


On 2/3/25 4:46 PM, Vincent Vanlaer wrote:
> 
> 
> 
> On 4/02/2025 01:42, Jerry D wrote:
>> On 2/3/25 2:14 PM, Vincent Vanlaer wrote:
>>> Hi all,
>>>
>>> Gentle ping for the patch below: https://gcc.gnu.org/pipermail/ 
>>> fortran/2024-December/061467.html
>>>
>>> Best wishes,
>>> Vincent
>>>
>>> On 30/12/2024 00:19, Vincent Vanlaer wrote:
>>>> The -MT and -MQ options should replace the default target in the
>>>> generated dependency file. deps_add_target needs to be called before
>>>> cpp_read_main_file, otherwise the original object name is added.
>>>>
>>>> gcc/fortran/
>>>>     PR fortran/47485
>>>>     * cpp.cc: fix -MT/-MQ adding additional target instead of
>>>>       replacing the default
>>>>
>>>> gcc/testsuite/
>>>>     PR fortran/47485
>>>>     * gfortran.dg/dependency_generation_1.f90: New test
>>>>
>>>> Signed-off-by: Vincent Vanlaer <vincenttc@volkihar.be>
>>>> ---
>>>>   gcc/fortran/cpp.cc                             | 18 +++++++++++ 
>>>> +------
>>>>   .../gfortran.dg/dependency_generation_1.f90    | 15 +++++++++++++++
>>>>   2 files changed, 27 insertions(+), 6 deletions(-)
>>>>   create mode 100644 gcc/testsuite/gfortran.dg/ 
>>>> dependency_generation_1.f90
>>>>
>>>> diff --git a/gcc/fortran/cpp.cc b/gcc/fortran/cpp.cc
>>>> index 7c5f00cfd69..3b93d17b90f 100644
>>>> --- a/gcc/fortran/cpp.cc
>>>> +++ b/gcc/fortran/cpp.cc
>>>> @@ -96,6 +96,8 @@ struct gfc_cpp_option_data
>>>>     int deps_skip_system;                 /* -MM */
>>>>     const char *deps_filename;            /* -M[M]D */
>>>>     const char *deps_filename_user;       /* -MF <arg> */
>>>> +  const char *deps_target_filename;     /* -MT / -MQ <arg> */
>>>> +  bool quote_deps_target_filename;      /* -MQ */
>>>>     int deps_missing_are_generated;       /* -MG */
>>>>     int deps_phony;                       /* -MP */
>>>>     int warn_date_time;                   /* -Wdate-time */
>>>> @@ -287,6 +289,8 @@ gfc_cpp_init_options (unsigned int 
>>>> decoded_options_count,
>>>>     gfc_cpp_option.deps_missing_are_generated = 0;
>>>>     gfc_cpp_option.deps_filename = NULL;
>>>>     gfc_cpp_option.deps_filename_user = NULL;
>>>> +  gfc_cpp_option.deps_target_filename = NULL;
>>>> +  gfc_cpp_option.quote_deps_target_filename = false;
>>>>     gfc_cpp_option.multilib = NULL;
>>>>     gfc_cpp_option.prefix = NULL;
>>>> @@ -439,9 +443,8 @@ gfc_cpp_handle_option (size_t scode, const char 
>>>> *arg, int value ATTRIBUTE_UNUSED
>>>>       case OPT_MQ:
>>>>       case OPT_MT:
>>>> - 
>>>> gfc_cpp_option.deferred_opt[gfc_cpp_option.deferred_opt_count].code 
>>>> = code;
>>>> - gfc_cpp_option.deferred_opt[gfc_cpp_option.deferred_opt_count].arg 
>>>> = arg;
>>>> -      gfc_cpp_option.deferred_opt_count++;
>>>> +      gfc_cpp_option.quote_deps_target_filename = (code == OPT_MQ);
>>>> +      gfc_cpp_option.deps_target_filename = arg;
>>>>         break;
>>>>       case OPT_P:
>>>> @@ -593,6 +596,12 @@ gfc_cpp_init_0 (void)
>>>>       }
>>>>     gcc_assert(cpp_in);
>>>> +
>>>> +  if (gfc_cpp_option.deps_target_filename)
>>>> +    if (mkdeps *deps = cpp_get_deps (cpp_in))
>>>> +      deps_add_target (deps, gfc_cpp_option.deps_target_filename,
>>>> +               gfc_cpp_option.quote_deps_target_filename);
>>>> +
>>>>     if (!cpp_read_main_file (cpp_in, gfc_source_file))
>>>>       errorcount++;
>>>>   }
>>>> @@ -635,9 +644,6 @@ gfc_cpp_init (void)
>>>>         else
>>>>           cpp_assert (cpp_in, opt->arg);
>>>>       }
>>>> -      else if (opt->code == OPT_MT || opt->code == OPT_MQ)
>>>> -    if (mkdeps *deps = cpp_get_deps (cpp_in))
>>>> -      deps_add_target (deps, opt->arg, opt->code == OPT_MQ);
>>>>       }
>>>>     /* Pre-defined macros for non-required INTEGER kind types.  */
>>>> diff --git a/gcc/testsuite/gfortran.dg/dependency_generation_1.f90 
>>>> b/ gcc/testsuite/gfortran.dg/dependency_generation_1.f90
>>>> new file mode 100644
>>>> index 00000000000..d42a257f83a
>>>> --- /dev/null
>>>> +++ b/gcc/testsuite/gfortran.dg/dependency_generation_1.f90
>>>> @@ -0,0 +1,15 @@
>>>> +! This test case ensures that the -MT flag is correctly replacing 
>>>> the object name in the dependency file.
>>>> +! See PR 47485
>>>> +!
>>>> +! Contributed by Vincent Vanlaer <vincenttc@volkihar.be>
>>>> +!
>>>> +! { dg-do preprocess }
>>>> +! { dg-additional-options "-cpp" }
>>>> +! { dg-additional-options "-M" }
>>>> +! { dg-additional-options "-MF deps" }
>>>> +! { dg-additional-options "-MT obj.o" }
>>>> +
>>>> +module test
>>>> +end module
>>>> +
>>>> +! { dg-final { scan-file "deps" "obj.o:.*" } }
>>>
>>
>> Do you have commit rights to gcc? I did not catch your original post.
>>
>> Jerry
> 
> I do not, this is my first time contributing to GCC.
> 
> Vincent

This all looks reasonable to me. I will push this if no objections come 
in today.

Regards,

Jerry


More information about the Fortran mailing list