public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/meissner/heads/ieee)] d: Fix missing dependencies in depfile for imported files (PR93038)
@ 2020-04-16 22:33 Michael Meissner
  0 siblings, 0 replies; only message in thread
From: Michael Meissner @ 2020-04-16 22:33 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:4a01f7b1e73e98a86520d8a825ddd3777faa7c33

commit 4a01f7b1e73e98a86520d8a825ddd3777faa7c33
Author: Iain Buclaw <ibuclaw@gdcproject.org>
Date:   Sun Mar 22 00:10:17 2020 +0100

    d: Fix missing dependencies in depfile for imported files (PR93038)
    
    A new field for tracking imported files was added to the front-end, this
    makes use of it by writing all such files in the make dependency list.
    
    gcc/d/ChangeLog:
    
    2020-03-22  Iain Buclaw  <ibuclaw@gdcproject.org>
    
            PR d/93038
            * d-lang.cc (deps_write): Add content imported files to the make
            dependency list.
    
    gcc/testsuite/ChangeLog:
    
    2020-03-22  Iain Buclaw  <ibuclaw@gdcproject.org>
    
            PR d/93038
            * gdc.dg/fileimports/pr93038.txt: New test.
            * gdc.dg/pr93038.d: New test.

Diff:
---
 gcc/d/ChangeLog                              |  6 ++++
 gcc/d/d-lang.cc                              | 52 +++++++++++++++++-----------
 gcc/testsuite/ChangeLog                      |  6 ++++
 gcc/testsuite/gdc.dg/fileimports/pr93038.txt |  1 +
 gcc/testsuite/gdc.dg/pr93038.d               |  8 +++++
 5 files changed, 53 insertions(+), 20 deletions(-)

diff --git a/gcc/d/ChangeLog b/gcc/d/ChangeLog
index 31c9c4b3a20..916319f6bf7 100644
--- a/gcc/d/ChangeLog
+++ b/gcc/d/ChangeLog
@@ -1,3 +1,9 @@
+2020-03-22  Iain Buclaw  <ibuclaw@gdcproject.org>
+
+	PR d/93038
+	* d-lang.cc (deps_write): Add content imported files to the make
+	dependency list.
+
 2020-03-21  Iain Buclaw  <ibuclaw@gdcproject.org>
 
 	PR d/94240
diff --git a/gcc/d/d-lang.cc b/gcc/d/d-lang.cc
index 3f50b5f1104..514799d8e89 100644
--- a/gcc/d/d-lang.cc
+++ b/gcc/d/d-lang.cc
@@ -151,7 +151,8 @@ deps_add_target (const char *target, bool quoted)
 static void
 deps_write (Module *module, OutBuffer *buffer, unsigned colmax = 72)
 {
-  hash_set <const char *> dependencies;
+  hash_set <const char *> seen_modules;
+  vec <const char *> dependencies = vNULL;
 
   Modules modlist;
   modlist.push (module);
@@ -179,38 +180,28 @@ deps_write (Module *module, OutBuffer *buffer, unsigned colmax = 72)
   buffer->writestring (":");
   column++;
 
-  /* Write out all make dependencies.  */
+  /* Search all modules for file dependencies.  */
   while (modlist.dim > 0)
     {
       Module *depmod = modlist.pop ();
 
       str = depmod->srcfile->name->str;
-      size = strlen (str);
 
-      /* Skip dependencies that have already been written.  */
-      if (dependencies.add (str))
+      /* Skip modules that have already been looked at.  */
+      if (seen_modules.add (str))
 	continue;
 
-      column += size;
-
-      if (colmax && column > colmax)
-	{
-	  buffer->writestring (" \\\n ");
-	  column = size + 1;
-	}
-      else
-	{
-	  buffer->writestring (" ");
-	  column++;
-	}
-
-      buffer->writestring (str);
+      dependencies.safe_push (str);
 
       /* Add to list of phony targets if is not being compile.  */
       if (d_option.deps_phony && !depmod->isRoot ())
 	phonylist.push (depmod);
 
-      /* Search all imports of the written dependency.  */
+      /* Add imported files to dependency list.  */
+      for (size_t i = 0; i < depmod->contentImportedFiles.dim; i++)
+	dependencies.safe_push (depmod->contentImportedFiles[i]);
+
+      /* Search all imports of the module.  */
       for (size_t i = 0; i < depmod->aimports.dim; i++)
 	{
 	  Module *m = depmod->aimports[i];
@@ -244,6 +235,27 @@ deps_write (Module *module, OutBuffer *buffer, unsigned colmax = 72)
 	}
     }
 
+  /* Write out all make dependencies.  */
+  for (size_t i = 0; i < dependencies.length (); i++)
+    {
+      str = dependencies[i];
+      size = strlen (str);
+      column += size;
+
+      if (colmax && column > colmax)
+	{
+	  buffer->writestring (" \\\n ");
+	  column = size + 1;
+	}
+      else
+	{
+	  buffer->writestring (" ");
+	  column++;
+	}
+
+      buffer->writestring (str);
+    }
+
   buffer->writenl ();
 
   /* Write out all phony targets.  */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3ff8b693644..c8701caaf6f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2020-03-22  Iain Buclaw  <ibuclaw@gdcproject.org>
+
+	PR d/93038
+	* gdc.dg/fileimports/pr93038.txt: New test.
+	* gdc.dg/pr93038.d: New test.
+
 2020-03-21  Patrick Palka  <ppalka@redhat.com>
 
 	PR c++/94066
diff --git a/gcc/testsuite/gdc.dg/fileimports/pr93038.txt b/gcc/testsuite/gdc.dg/fileimports/pr93038.txt
new file mode 100644
index 00000000000..9d1dc810c95
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/fileimports/pr93038.txt
@@ -0,0 +1 @@
+v2.091.0
diff --git a/gcc/testsuite/gdc.dg/pr93038.d b/gcc/testsuite/gdc.dg/pr93038.d
new file mode 100644
index 00000000000..4e09690a473
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/pr93038.d
@@ -0,0 +1,8 @@
+// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93038
+// { dg-options "-J $srcdir/gdc.dg/fileimports -MMD" }
+// { dg-do compile }
+// { dg-final { scan-file pr93038.deps "pr93038.o: \[^\n\]*/pr93038.d \[ \\\\\n\]*\[^\n\]*/fileimports/pr93038.txt" } }
+// { dg-final { file delete pr93038.deps } }
+module pr93038;
+
+const VERSION = import("pr93038.txt");


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-04-16 22:33 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-16 22:33 [gcc(refs/users/meissner/heads/ieee)] d: Fix missing dependencies in depfile for imported files (PR93038) Michael Meissner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).