This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug bootstrap/11933] [3.4 regression] Parallel bootstrap failure linking gij


PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11933



------- Additional Comments From dj at redhat dot com  2003-10-09 18:17 -------
Subject: Re:  [3.4 regression] Parallel bootstrap failure linking gij


Just for fun, try this patch to gnu make 3.80.  Use "make --reverse-deps"
and see if it fails the build *every* time.

diff -r -p2 make-3.80-orig/filedef.h make-3.80/filedef.h
*** make-3.80-orig/filedef.h	2002-08-01 09:16:57.000000000 -0400
--- make-3.80/filedef.h	2003-10-02 20:39:56.000000000 -0400
*************** extern void init_hash_files PARAMS ((voi
*** 114,117 ****
--- 114,119 ----
  extern char *build_target_list PARAMS ((char *old_list));
  
+ extern void reverse_deps ();
+ 
  #if FILE_TIMESTAMP_HI_RES
  # define FILE_TIMESTAMP_STAT_MODTIME(fname, st) \
diff -r -p2 make-3.80-orig/main.c make-3.80/main.c
*** make-3.80-orig/main.c	2002-08-09 21:27:17.000000000 -0400
--- make-3.80/main.c	2003-10-02 22:09:43.000000000 -0400
*************** static int print_usage_flag = 0;
*** 251,254 ****
--- 251,260 ----
  int warn_undefined_variables_flag;
  
+ /* If nonzero, reverse the order in which the dependencies of each
+    target are rebuilt.  This is for debugging Makefile
+    dependencies.  */
+ 
+ int reverse_deps_flag;
+ 
  /* If nonzero, always build all targets, regardless of whether
     they appear out of date or not.  */
*************** static const char *const usage[] =
*** 326,329 ****
--- 332,337 ----
      N_("\
    --warn-undefined-variables  Warn when an undefined variable is referenced.\n"),
+     N_("\
+   --reverse-deps              Reverse the order of dependencies for each target.\n"),
      NULL
    };
*************** static const struct command_switch switc
*** 386,389 ****
--- 394,399 ----
      { CHAR_MAX+4, flag, (char *) &warn_undefined_variables_flag, 1, 1, 0, 0, 0,
  	"warn-undefined-variables" },
+     { CHAR_MAX+5, flag, (char *) &reverse_deps_flag, 1, 1, 0, 0, 0,
+ 	"reverse-deps" },
      { '\0', }
    };
diff -r -p2 make-3.80-orig/make.h make-3.80/make.h
*** make-3.80-orig/make.h	2002-09-11 12:55:44.000000000 -0400
--- make-3.80/make.h	2003-10-02 23:46:33.000000000 -0400
*************** extern int just_print_flag, silent_flag,
*** 490,494 ****
  extern int print_data_base_flag, question_flag, touch_flag, always_make_flag;
  extern int env_overrides, no_builtin_rules_flag, no_builtin_variables_flag;
! extern int print_version_flag, print_directory_flag;
  extern int warn_undefined_variables_flag, posix_pedantic, not_parallel;
  extern int clock_skew_detected;
--- 490,494 ----
  extern int print_data_base_flag, question_flag, touch_flag, always_make_flag;
  extern int env_overrides, no_builtin_rules_flag, no_builtin_variables_flag;
! extern int print_version_flag, print_directory_flag, reverse_deps_flag;
  extern int warn_undefined_variables_flag, posix_pedantic, not_parallel;
  extern int clock_skew_detected;
diff -r -p2 make-3.80-orig/remake.c make-3.80/remake.c
*** make-3.80-orig/remake.c	2002-08-07 20:11:19.000000000 -0400
--- make-3.80/remake.c	2003-10-02 23:45:26.000000000 -0400
*************** update_file_1 (file, depth)
*** 349,354 ****
    int noexist, must_make, deps_changed;
    int dep_status = 0;
!   register struct dep *d, *lastd;
    int running = 0;
  
    DBF (DB_VERBOSE, _("Considering target file `%s'.\n"));
--- 349,355 ----
    int noexist, must_make, deps_changed;
    int dep_status = 0;
!   register struct dep *d, *lastd, **deplist;
    int running = 0;
+   int depn, depi;
  
    DBF (DB_VERBOSE, _("Considering target file `%s'.\n"));
*************** update_file_1 (file, depth)
*** 432,442 ****
       and see whether any of them is more recent than this file.  */
  
!   lastd = 0;
!   d = file->deps;
!   while (d != 0)
      {
        FILE_TIMESTAMP mtime;
        int maybe_make;
  
        check_renamed (d->file);
  
--- 433,448 ----
       and see whether any of them is more recent than this file.  */
  
!   for (depn=0, d=file->deps; d; depn++, d=d->next);
!   deplist = (struct dep **) malloc (depn * sizeof (struct dep *));
!   for (depi=0, d=file->deps; d; depi++, d=d->next)
!     deplist[depi] = d;
! 
!   for (depi = 0; depi < depn; depi ++)
      {
        FILE_TIMESTAMP mtime;
        int maybe_make;
  
+       d = deplist[reverse_deps_flag ? depn-depi-1 : depi];
+ 
        check_renamed (d->file);
  
*************** update_file_1 (file, depth)
*** 446,449 ****
--- 452,456 ----
        if (is_updating (d->file))
  	{
+ 	  struct dep *d2;
  	  error (NILF, _("Circular %s <- %s dependency dropped."),
  		 file->name, d->file->name);
*************** update_file_1 (file, depth)
*** 451,459 ****
  	     a reference to it when we were called recursively via
  	     check_dep below.  */
! 	  if (lastd == 0)
  	    file->deps = d->next;
  	  else
! 	    lastd->next = d->next;
! 	  d = d->next;
  	  continue;
  	}
--- 458,467 ----
  	     a reference to it when we were called recursively via
  	     check_dep below.  */
! 	  if (file->deps == d)
  	    file->deps = d->next;
  	  else
! 	    for (d2=file->deps; d2; d2=d2->next)
! 	      if (d2->next == d)
! 		d2->next = d->next;
  	  continue;
  	}
*************** update_file_1 (file, depth)
*** 485,491 ****
        if (!running)
  	d->changed = file_mtime (d->file) != mtime;
- 
-       lastd = d;
-       d = d->next;
      }
  
--- 493,496 ----


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]