Hi,

It seems that the output target name gets corrupted (see the extra chars at the end of 'MyTargetName'):
$ cat test.d
// empty file

$ gdc -Isrc -MM "test.d" -MT "MyTargetName" -MF "test.deps"

$ cat test.deps
MyTargetName�: test.d

$ gdc --version
gdc (Debian 11.2.0-10) 11.2.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$

Here's the fix I'm suggesting:

diff --git a/gcc/d/d-lang.cc b/gcc/d/d-lang.cc
index be6330fbd..4749bfb98 100644
--- a/gcc/d/d-lang.cc
+++ b/gcc/d/d-lang.cc
@@ -110,6 +110,7 @@ deps_add_target (const char *target, bool quoted)
   if (!quoted)
     {
       obstack_grow0 (&buffer, target, strlen (target));
+      obstack_1grow (&buffer, '\0');
       d_option.deps_target.safe_push ((const char *) obstack_finish (&buffer));
       return;
     }

Cheers,

Sebastien Alaiwan