aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/d/ChangeLog6
-rw-r--r--gcc/d/d-lang.cc52
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gdc.dg/fileimports/pr93038.txt1
-rw-r--r--gcc/testsuite/gdc.dg/pr93038.d8
5 files changed, 53 insertions, 20 deletions
diff --git a/gcc/d/ChangeLog b/gcc/d/ChangeLog
index 31c9c4b..916319f 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 3f50b5f..514799d 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 3ff8b69..c8701caaf 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 0000000..9d1dc81
--- /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 0000000..4e09690
--- /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");