Hi,

The implementation of deps_add_target in d-lang.cc was based on what was
present in libcpp.  This patch synchronizes the escaping logic to match
the current version.

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

Regards
Iain

---
gcc/d/ChangeLog:

        * d-lang.cc (deps_add_target): Handle quoting ':' character.
        Reimplement backslash tracking.
---
 gcc/d/d-lang.cc | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/gcc/d/d-lang.cc b/gcc/d/d-lang.cc
index fb95716f918..f20d1f00cb3 100644
--- a/gcc/d/d-lang.cc
+++ b/gcc/d/d-lang.cc
@@ -114,26 +114,35 @@ deps_add_target (const char *target, bool quoted)
     }
 
   /* Quote characters in target which are significant to Make.  */
+  unsigned slashes = 0;
+
   for (const char *p = target; *p != '\0'; p++)
     {
       switch (*p)
        {
+       case '\\':
+         slashes++;
+         break;
+
        case ' ':
        case '\t':
-         for (const char *q = p - 1; target <= q && *q == '\\';  q--)
+         while (slashes--)
            obstack_1grow (&buffer, '\\');
          obstack_1grow (&buffer, '\\');
-         break;
+         goto Ldef;
 
        case '$':
          obstack_1grow (&buffer, '$');
-         break;
+         goto Ldef;
 
        case '#':
+       case ':':
          obstack_1grow (&buffer, '\\');
-         break;
+         goto Ldef;
 
        default:
+       Ldef:
+         slashes = 0;
          break;
        }
 
-- 
2.27.0

Reply via email to