diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 213b2a596605033be0287419ec8c25bf785dc9da..c9f490232ca2a250f8307482628b64a90cfa5449 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2006-04-02  Roger Sayle  <roger@eyesopen.com>
+
+	PR middle-end/26977
+	* expr.c (emit_group_store): Check whether simplify_gen_subreg returns
+	NULL_RTX, indicating it couldn't create a valid paradoxical subreg.
+
 2006-04-02  Sebastian Pop  <pop@cri.ensmp.fr>
 
 	PR tree-optimization/26939
diff --git a/gcc/expr.c b/gcc/expr.c
index 324a427f687f0e5dc46adb39ccc960497e321d85..81cac760cd3340c691244cfba7ee20eb14b9d951 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -1945,9 +1945,12 @@ emit_group_store (rtx orig_dst, rtx src, tree type ATTRIBUTE_UNUSED, int ssize)
 	    {
 	      temp = simplify_gen_subreg (outer, tmps[start],
 					  inner, bytepos);
-	      emit_move_insn (dst, temp);
-	      done = true;
-	      start++;
+	      if (temp)
+		{
+		  emit_move_insn (dst, temp);
+		  done = true;
+		  start++;
+		}
 	    }
 	}
 
@@ -1961,9 +1964,12 @@ emit_group_store (rtx orig_dst, rtx src, tree type ATTRIBUTE_UNUSED, int ssize)
 	    {
 	      temp = simplify_gen_subreg (outer, tmps[finish - 1],
 					  inner, bytepos);
-	      emit_move_insn (dst, temp);
-	      done = true;
-	      finish--;
+	      if (temp)
+		{
+		  emit_move_insn (dst, temp);
+		  done = true;
+		  finish--;
+		}
 	    }
 	}