diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 39baf065e5e10610eea6855221d6545e8da8e784..de08bab31e921ee4ff5d6440d45191439ba671a7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2011-02-05  Jie Zhang  <jie@codesourcery.com>
+
+	PR debug/42631
+	* web.c (entry_register): Don't clobber the number of the
+	first uninitialized reference in used[].
+
 2011-02-04  Sebastian Pop  <sebastian.pop@amd.com>
 
 	PR tree-optimization/46194
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 066e01963ee447e335c8da5cffaa6c62aa69f13b..89053c20e6dfbaea56dc4d6ee230b3c8a0771042 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2011-02-05  Jie Zhang  <jie@codesourcery.com>
+
+	PR debug/42631
+	* gcc.dg/pr42631.c: Update test.
+	* gcc.dg/pr42631-2.c: New test.
+
 2001-02-05  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
 	PR fortran/47574
diff --git a/gcc/testsuite/gcc.dg/pr42631-2.c b/gcc/testsuite/gcc.dg/pr42631-2.c
new file mode 100644
index 0000000000000000000000000000000000000000..a5da2de3f4b4a61275e0829ea97cbe18545ca33e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr42631-2.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -funroll-loops -fdump-rtl-web" } */
+
+foo()
+{
+}
+
+/* { dg-final { scan-rtl-dump-not "Web oldreg" "web" } } */
+/* { dg-final { cleanup-rtl-dump "web" } } */
diff --git a/gcc/testsuite/gcc.dg/pr42631.c b/gcc/testsuite/gcc.dg/pr42631.c
index f5ac5a53a107db8653d56045b589064aa1d0e071..3d6c229a01633e50131dd9c8b7263cfce5f63c10 100644
--- a/gcc/testsuite/gcc.dg/pr42631.c
+++ b/gcc/testsuite/gcc.dg/pr42631.c
@@ -14,10 +14,13 @@
    combine uninitialized uses into a single web.  */
 
 /* { dg-do compile } */
-/* { dg-options "-g -O1 -funroll-loops -fcompare-debug" } */
+/* { dg-options "-g -O1 -funroll-loops -fcompare-debug -fdump-rtl-web" } */
 
 void foo()
 {
   unsigned k;
   while (--k > 0);
 }
+
+/* { dg-final { scan-rtl-dump-not "Web oldreg" "web" } } */
+/* { dg-final { cleanup-rtl-dump "web" } } */
diff --git a/gcc/web.c b/gcc/web.c
index 9b849249b0d0634067aaaac687c024f18051e428..7014aa55dc74e0c34167db7aec1e012ad40a6dd6 100644
--- a/gcc/web.c
+++ b/gcc/web.c
@@ -260,7 +260,11 @@ entry_register (struct web_entry *entry, df_ref ref, unsigned int *used)
      and there won't be any use for the other values when we get to
      this point.  */
   if (used[REGNO (reg)] != 1)
-    newreg = reg, used[REGNO (reg)] = 1;
+    {
+      newreg = reg;
+      if (!used[REGNO (reg)])
+	used[REGNO (reg)] = 1;
+    }
   else
     {
       newreg = gen_reg_rtx (GET_MODE (reg));