[gcc-7] 272/354: * Apply proposed patch for PR driver/81829. Closes: #853537.

Ximin Luo infinity0 at debian.org
Thu Nov 23 15:51:07 UTC 2017


This is an automated email from the git hooks/post-receive script.

infinity0 pushed a commit to branch master
in repository gcc-7.

commit f06001c987263d084ba35c0d84a7c82251422158
Author: doko <doko at 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca>
Date:   Tue Aug 15 16:04:26 2017 +0000

      * Apply proposed patch for PR driver/81829. Closes: #853537.
    
    
    git-svn-id: svn+ssh://svn.debian.org/svn/gcccvs/branches/sid/gcc-7@9627 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca
---
 debian/changelog            |   1 +
 debian/patches/pr81829.diff | 247 ++++++++++++++++++++++++++++++++++++++++++++
 debian/rules.patch          |   1 +
 3 files changed, 249 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index 1342e8b..8974195 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,6 +2,7 @@ gcc-7 (7.2.0-1) UNRELEASED; urgency=medium
 
   * GCC 7.2.0 release.
   * Update libgcc1 symbols file for s390x.
+  * Apply proposed patch for PR driver/81829. Closes: #853537.
 
  -- Matthias Klose <doko at debian.org>  Tue, 15 Aug 2017 17:21:51 +0200
 
diff --git a/debian/patches/pr81829.diff b/debian/patches/pr81829.diff
new file mode 100644
index 0000000..9460a2d
--- /dev/null
+++ b/debian/patches/pr81829.diff
@@ -0,0 +1,247 @@
+Index: b/src/gcc/file-find.c
+===================================================================
+--- a/src/gcc/file-find.c
++++ b/src/gcc/file-find.c
+@@ -21,6 +21,7 @@ along with GCC; see the file COPYING3.
+ #include "system.h"
+ #include "filenames.h"
+ #include "file-find.h"
++#include "selftest.h"
+ 
+ static bool debug = false;
+ 
+@@ -126,11 +127,22 @@ do_add_prefix (struct path_prefix *ppref
+   /* Keep track of the longest prefix.  */
+ 
+   len = strlen (prefix);
++  bool append_separator = !IS_DIR_SEPARATOR (prefix[len - 1]);
++  if (append_separator)
++    len++;
++
+   if (len > pprefix->max_len)
+     pprefix->max_len = len;
+ 
+   pl = XNEW (struct prefix_list);
+-  pl->prefix = xstrdup (prefix);
++  char *dup = XCNEWVEC (char, len + 1);
++  memcpy (dup, prefix, append_separator ? len - 1 : len);
++  if (append_separator)
++    {
++      dup[len - 1] = DIR_SEPARATOR;
++      dup[len] = '\0';
++    }
++  pl->prefix = dup;
+ 
+   if (*prev)
+     pl->next = *prev;
+@@ -212,34 +224,170 @@ prefix_from_string (const char *p, struc
+ void
+ remove_prefix (const char *prefix, struct path_prefix *pprefix)
+ {
+-  struct prefix_list *remove, **prev, **remove_prev = NULL;
++  char *dup = NULL;
+   int max_len = 0;
++  size_t len = strlen (prefix);
++  if (prefix[len - 1] != DIR_SEPARATOR)
++    {
++      char *dup = XNEWVEC (char, len + 2);
++      memcpy (dup, prefix, len);
++      dup[len] = DIR_SEPARATOR;
++      dup[len + 1] = '\0';
++      prefix = dup;
++    }
+ 
+   if (pprefix->plist)
+     {
+-      prev = &pprefix->plist;
+-      for (struct prefix_list *pl = pprefix->plist; pl->next; pl = pl->next)
++      prefix_list *prev = NULL;
++      for (struct prefix_list *pl = pprefix->plist; pl;)
+ 	{
+ 	  if (strcmp (prefix, pl->prefix) == 0)
+ 	    {
+-	      remove = pl;
+-	      remove_prev = prev;
+-	      continue;
++	      if (prev == NULL)
++		pprefix->plist = pl->next;
++	      else
++		prev->next = pl->next;
++
++	      prefix_list *remove = pl;
++	      free (remove);
++	      pl = pl->next;
+ 	    }
++	  else
++	    {
++	      prev = pl;
+ 
+-	  int l = strlen (pl->prefix);
+-	  if (l > max_len)
+-	    max_len = l;
++	      int l = strlen (pl->prefix);
++	      if (l > max_len)
++		max_len = l;
+ 
+-	  prev = &pl;
+-	}
+-
+-      if (remove_prev)
+-	{
+-	  *remove_prev = remove->next;
+-	  free (remove);
++	      pl = pl->next;
++	    }
+ 	}
+ 
+       pprefix->max_len = max_len;
+     }
++
++  if (dup)
++    free (dup);
++}
++
++#if CHECKING_P
++
++namespace selftest {
++
++/* Encode '#' and '_' to path and dir separators in order to test portability
++   of the test-cases.  */
++
++static char *
++purge (const char *input)
++{
++  char *s = xstrdup (input);
++  for (char *c = s; *c != '\0'; c++)
++    switch (*c)
++      {
++      case '/':
++      case ':':
++	*c = 'a'; /* Poison default string values.  */
++	break;
++      case '_':
++	*c = PATH_SEPARATOR;
++	break;
++      case '#':
++	*c = DIR_SEPARATOR;
++	break;
++      default:
++	break;
++      }
++
++  return s;
++}
++
++const char *env1 = purge ("#home#user#bin_#home#user#bin_#bin_#usr#bin");
++const char *env2 = purge ("#root_#root_#root");
++
++/* Verify creation of prefix.  */
++
++static void
++file_find_verify_prefix_creation (void)
++{
++  path_prefix prefix;
++  memset (&prefix, 0, sizeof (prefix));
++  prefix_from_string (env1, &prefix);
++
++  ASSERT_EQ (15, prefix.max_len);
++
++  /* All prefixes end with DIR_SEPARATOR.  */
++  ASSERT_STREQ (purge ("#home#user#bin#"), prefix.plist->prefix);
++  ASSERT_STREQ (purge ("#home#user#bin#"), prefix.plist->next->prefix);
++  ASSERT_STREQ (purge ("#bin#"), prefix.plist->next->next->prefix);
++  ASSERT_STREQ (purge ("#usr#bin#"), prefix.plist->next->next->next->prefix);
++  ASSERT_EQ (NULL, prefix.plist->next->next->next->next);
++}
++
++/* Verify adding a prefix.  */
++
++static void
++file_find_verify_prefix_add (void)
++{
++  path_prefix prefix;
++  memset (&prefix, 0, sizeof (prefix));
++  prefix_from_string (env1, &prefix);
++
++  add_prefix (&prefix, purge ("#root"));
++  ASSERT_STREQ (purge ("#home#user#bin#"), prefix.plist->prefix);
++  ASSERT_STREQ (purge ("#root#"),
++		prefix.plist->next->next->next->next->prefix);
++
++  add_prefix_begin (&prefix, purge ("#var"));
++  ASSERT_STREQ (purge ("#var#"), prefix.plist->prefix);
++}
++
++/* Verify adding a prefix.  */
++
++static void
++file_find_verify_prefix_removal (void)
++{
++  path_prefix prefix;
++  memset (&prefix, 0, sizeof (prefix));
++  prefix_from_string (env1, &prefix);
++
++  /* All occurences of a prefix should be removed.  */
++  remove_prefix (purge ("#home#user#bin"), &prefix);
++
++  ASSERT_EQ (9, prefix.max_len);
++  ASSERT_STREQ (purge ("#bin#"), prefix.plist->prefix);
++  ASSERT_STREQ (purge ("#usr#bin#"), prefix.plist->next->prefix);
++  ASSERT_EQ (NULL, prefix.plist->next->next);
++
++  remove_prefix (purge ("#usr#bin#"), &prefix);
++  ASSERT_EQ (5, prefix.max_len);
++  ASSERT_STREQ (purge ("#bin#"), prefix.plist->prefix);
++  ASSERT_EQ (NULL, prefix.plist->next);
++
++  remove_prefix (purge ("#dev#random#"), &prefix);
++  remove_prefix (purge ("#bi#"), &prefix);
++
++  remove_prefix (purge ("#bin#"), &prefix);
++  ASSERT_EQ (NULL, prefix.plist);
++  ASSERT_EQ (0, prefix.max_len);
++
++  memset (&prefix, 0, sizeof (prefix));
++  prefix_from_string (env2, &prefix);
++  ASSERT_EQ (6, prefix.max_len);
++
++  remove_prefix (purge ("#root#"), &prefix);
++  ASSERT_EQ (NULL, prefix.plist);
++  ASSERT_EQ (0, prefix.max_len);
+ }
++
++/* Run all of the selftests within this file.  */
++
++void file_find_c_tests ()
++{
++  file_find_verify_prefix_creation ();
++  file_find_verify_prefix_add ();
++  file_find_verify_prefix_removal ();
++}
++
++} // namespace selftest
++#endif /* CHECKING_P */
+Index: b/src/gcc/selftest-run-tests.c
+===================================================================
+--- a/src/gcc/selftest-run-tests.c
++++ b/src/gcc/selftest-run-tests.c
+@@ -66,6 +66,7 @@ selftest::run_tests ()
+   sreal_c_tests ();
+   fibonacci_heap_c_tests ();
+   typed_splay_tree_c_tests ();
++  file_find_c_tests ();
+ 
+   /* Mid-level data structures.  */
+   input_c_tests ();
+Index: b/src/gcc/selftest.h
+===================================================================
+--- a/src/gcc/selftest.h
++++ b/src/gcc/selftest.h
+@@ -196,6 +196,7 @@ extern void tree_c_tests ();
+ extern void tree_cfg_c_tests ();
+ extern void vec_c_tests ();
+ extern void wide_int_cc_tests ();
++extern void file_find_c_tests ();
+ 
+ extern int num_passes;
+ 
diff --git a/debian/rules.patch b/debian/rules.patch
index 9fc4399..4a4330a 100644
--- a/debian/rules.patch
+++ b/debian/rules.patch
@@ -72,6 +72,7 @@ debian_patches += \
 	gcc-fuse-ld-lld \
 	libgo-s390x-default-isa \
 	pr81723 \
+	pr81829 \
 
 
 #	$(if $(filter yes, $(DEB_CROSS)),,gcc-print-file-name) \

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/gcc-7.git



More information about the Reproducible-commits mailing list