This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug bootstrap/11933] [3.4 regression] Parallel bootstrap failure linking gij
- From: "dj at redhat dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 9 Oct 2003 18:17:59 -0000
- Subject: [Bug bootstrap/11933] [3.4 regression] Parallel bootstrap failure linking gij
- References: <20030815190441.11933.lucier@math.purdue.edu>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
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 ----