On 2/4/25 9:29 AM, Jerry D wrote:
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 <vincen...@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 <vincen...@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

Regression tested OK. New test case passes.

So far all is well. Standing by for any other comments.

Jerry

Reply via email to