]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
alias.c (find_base_term, get_addr): Do not dereference NULL pointer when all VALUE...
authorJan Hubicka <jh@suse.cz>
Tue, 3 Feb 2004 23:53:48 +0000 (00:53 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Tue, 3 Feb 2004 23:53:48 +0000 (23:53 +0000)
* alias.c (find_base_term, get_addr):  Do not dereference NULL
pointer when all VALUE's locations has been invalidated.
(rtx_equal_for_memref_p): Simplify checking of VALUEs.

From-SVN: r77201

gcc/ChangeLog
gcc/alias.c

index 28688c942cdb2ba8ac90e7fd58b189a028998759..cdf9076f30a7220087e2548e83e60dd497cbaed0 100644 (file)
@@ -1,3 +1,9 @@
+2004-02-04  Jan Hubicka  <jh@suse.cz>
+
+       * alias.c (find_base_term, get_addr):  Do not dereference NULL
+       pointer when all VALUE's locations has been invalidated.
+       (rtx_equal_for_memref_p): Simplify checking of VALUEs.
+
 2004-02-03  Wolfgang Bangerth  <bangerth@dealii.org> 
 
        * doc/invoke.texi (x86 options): Fix spelling/wording.
index 00060fceea1622d434feae6e77b1d494c095658f..f0cfe4cf7a3554482d59b980aea6abe241f751b7 100644 (file)
@@ -1139,9 +1139,6 @@ rtx_equal_for_memref_p (rtx x, rtx y)
   /* Some RTL can be compared without a recursive examination.  */
   switch (code)
     {
-    case VALUE:
-      return CSELIB_VAL_PTR (x) == CSELIB_VAL_PTR (y);
-
     case REG:
       return REGNO (x) == REGNO (y);
 
@@ -1151,6 +1148,7 @@ rtx_equal_for_memref_p (rtx x, rtx y)
     case SYMBOL_REF:
       return XSTR (x, 0) == XSTR (y, 0);
 
+    case VALUE:
     case CONST_INT:
     case CONST_DOUBLE:
       /* There's no need to compare the contents of CONST_DOUBLEs or
@@ -1325,6 +1323,8 @@ find_base_term (rtx x)
 
     case VALUE:
       val = CSELIB_VAL_PTR (x);
+      if (!val)
+       return 0;
       for (l = val->locs; l; l = l->next)
        if ((x = find_base_term (l->loc)) != 0)
          return x;
@@ -1502,14 +1502,17 @@ get_addr (rtx x)
   if (GET_CODE (x) != VALUE)
     return x;
   v = CSELIB_VAL_PTR (x);
-  for (l = v->locs; l; l = l->next)
-    if (CONSTANT_P (l->loc))
-      return l->loc;
-  for (l = v->locs; l; l = l->next)
-    if (GET_CODE (l->loc) != REG && GET_CODE (l->loc) != MEM)
-      return l->loc;
-  if (v->locs)
-    return v->locs->loc;
+  if (v)
+    {
+      for (l = v->locs; l; l = l->next)
+       if (CONSTANT_P (l->loc))
+         return l->loc;
+      for (l = v->locs; l; l = l->next)
+       if (GET_CODE (l->loc) != REG && GET_CODE (l->loc) != MEM)
+         return l->loc;
+      if (v->locs)
+       return v->locs->loc;
+    }
   return x;
 }