diff mbox series

d: Fix missing dependencies in depfile for imported files (PR93038)

Message ID 20200321231503.30854-1-ibuclaw@gdcproject.org
State New
Headers show
Series d: Fix missing dependencies in depfile for imported files (PR93038) | expand

Commit Message

Jeff Law via Gcc-patches March 21, 2020, 11:15 p.m. UTC
Hi,

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,
fixing PR 93038.

Bootstrapped and tested on x86_64-linux-gnu, and committed to trunk.

Regards
Iain.

---
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.

---
 gcc/d/d-lang.cc                              | 52 ++++++++++++--------
 gcc/testsuite/gdc.dg/fileimports/pr93038.txt |  1 +
 gcc/testsuite/gdc.dg/pr93038.d               |  8 +++
 3 files changed, 41 insertions(+), 20 deletions(-)
 create mode 100644 gcc/testsuite/gdc.dg/fileimports/pr93038.txt
 create mode 100644 gcc/testsuite/gdc.dg/pr93038.d
diff mbox series

Patch

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/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");