aboutsummaryrefslogtreecommitdiff
path: root/gcc/d
diff options
context:
space:
mode:
authorIain Buclaw <ibuclaw@gdcproject.org>2020-03-22 00:10:17 +0100
committerIain Buclaw <ibuclaw@gdcproject.org>2020-03-22 00:10:37 +0100
commit4a01f7b1e73e98a86520d8a825ddd3777faa7c33 (patch)
tree1c5ea14af83ff31a1c8490f3b001c54a80029944 /gcc/d
parent424e39081f9ce716ad4b6306803c2784caba732a (diff)
downloadgcc-4a01f7b1e73e98a86520d8a825ddd3777faa7c33.zip
gcc-4a01f7b1e73e98a86520d8a825ddd3777faa7c33.tar.gz
gcc-4a01f7b1e73e98a86520d8a825ddd3777faa7c33.tar.bz2
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.
Diffstat (limited to 'gcc/d')
-rw-r--r--gcc/d/ChangeLog6
-rw-r--r--gcc/d/d-lang.cc52
2 files changed, 38 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. */