Fix fat-finger bug that left implicit rules with identical stem lengths
authorPaul Smith <psmith@gnu.org>
Sun, 25 Oct 2009 18:34:43 +0000 (18:34 +0000)
committerPaul Smith <psmith@gnu.org>
Sun, 25 Oct 2009 18:34:43 +0000 (18:34 +0000)
being sorted indeterminately.

ChangeLog
NEWS
implicit.c

index b475f4f5b1a3c2759df044be5b28e3f3551a861c..ebb1b663c624fddfb6184b35cbe39f4c37e55f4b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-10-25  Paul Smith  <psmith@gnu.org>
+
+       * implicit.c (stemlen_compare): Fix qsort() compare bug that
+       caused implicit rules with equal stem lengths to be sorted
+       indeterminately.
+
 2009-10-24  Paul Smith  <psmith@gnu.org>
 
        * main.c (usage): Add --eval to the usage string.
diff --git a/NEWS b/NEWS
index f05010579eda4e328aa925a8cd6fe7fa0c79c5ce..661f87bcf870d982265e013639df4fe23e11e42c 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,6 @@
 GNU make NEWS                                               -*-indented-text-*-
   History of user-visible changes.
-  12 Oct 2009
+  25 Oct 2009
 
 See the end of this file for copyrights and conditions.
 
@@ -20,12 +20,14 @@ Version 3.81.90
   existing targets were provided in $?).
 
 * WARNING: Backward-incompatibility!
-  As a result of parser enhancements, two backward-compatibility issues exist:
-  first, a prerequisite containing an "=" cannot be escaped with a backslash
-  any longer.  You must create a variable containing an "=" and use that
-  variable in the prerequisite.  Second, variable names can no longer contain
-  whitespace, unless you put the whitespace in a variable and use the
-  variable.
+  As a result of parser enhancements, three backward-compatibility issues
+  exist: first, a prerequisite containing an "=" cannot be escaped with a
+  backslash any longer.  You must create a variable containing an "=" and use
+  that variable in the prerequisite.  Second, variable names can no longer
+  contain whitespace, unless you put the whitespace in a variable and use the
+  variable.  Third, in previous versions of make it was sometimes not flagged
+  as an error for explicit and pattern targets to appear in the same rule.
+  Now this is always reported as an error.
 
 * WARNING: Backward-incompatibility!
   The pattern-specific variables and pattern rules are now applied in the
index b4e843cbccb7b4559169a98b7298d6d2301f7910..0bf89e0bd0814318fb8b96cb07afd497691f477c 100644 (file)
@@ -180,10 +180,10 @@ struct tryrule
 int
 stemlen_compare (const void *v1, const void *v2)
 {
-  const struct tryrule *r1 = (const struct tryrule *)v1;
-  const struct tryrule *r2 = (const struct tryrule *)v2;
+  const struct tryrule *r1 = v1;
+  const struct tryrule *r2 = v2;
   int r = r1->stemlen - r2->stemlen;
-  return r != 0 ? r : (int)(r1->order - r1->order);
+  return r != 0 ? r : (int)(r1->order - r2->order);
 }
 
 /* Search the pattern rules for a rule with an existing dependency to make