diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e9295e65252e288b09e775a0c0148edaf3fe2274..b0294d4fe6c91c886bb8c1451409f3d2cc8bd710 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2005-09-09  Sebastian Pop  <pop@cri.ensmp.fr>
+
+	* tree-chrec.c (evolution_function_is_invariant_rec_p): Use 
+	CHREC_LEFT and CHREC_RIGHT for accessing chrec components instead
+	of wrongly accessing operands.
+
 2005-09-09  Sebastian Pop  <pop@cri.ensmp.fr>
 
 	* Makefile.in (tree-chrec.o): Depends on SCEV_H.
diff --git a/gcc/tree-chrec.c b/gcc/tree-chrec.c
index 3324c8bc2b7c1f007c281da1aa7b08ffa7abdf23..88b27d84aa6cb6056d54cf0e3b91cad129020700 100644
--- a/gcc/tree-chrec.c
+++ b/gcc/tree-chrec.c
@@ -935,9 +935,16 @@ evolution_function_is_invariant_rec_p (tree chrec, int loopnum)
 				   chrec))
     return true;
 
-  if (TREE_CODE (chrec) == POLYNOMIAL_CHREC
-      && CHREC_VARIABLE (chrec) == (unsigned) loopnum)
-    return false;
+  if (TREE_CODE (chrec) == POLYNOMIAL_CHREC)
+    {
+      if (CHREC_VARIABLE (chrec) == (unsigned) loopnum
+	  || !evolution_function_is_invariant_rec_p (CHREC_RIGHT (chrec),
+						     loopnum)
+	  || !evolution_function_is_invariant_rec_p (CHREC_LEFT (chrec),
+						     loopnum))
+	return false;
+      return true;
+    }
 
   switch (TREE_CODE_LENGTH (TREE_CODE (chrec)))
     {