diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5f5a2e6a03dc797a6469fdbe77db2acc24703a4a..e14b895fcd49e17b84ccf1c4d540ee9f26c262df 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2009-11-22  Martin Jambor  <mjambor@suse.cz>
+
+	* tree-cfg.c (verify_types_in_gimple_reference): Error out on
+	V_C_E of an SSA_NAME or an invariant if lvalue is required.
+	(verify_gimple_call): Verify LHS also with with
+	verify_types_in_gimple_reference.
+
 2009-11-21  Martin Jambor  <mjambor@suse.cz>
 
 	PR middle-end/42025
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index b3b71b9abba95e26f46cb29ecff77b06612b161d..13aa63f1d59f9e7e160fda3e31f0be152ef45b77 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -2889,12 +2889,24 @@ verify_types_in_gimple_reference (tree expr, bool require_lvalue)
 	  return true;
 	}
 
-      /* For VIEW_CONVERT_EXPRs which are allowed here, too, there
-	 is nothing to verify.  Gross mismatches at most invoke
-	 undefined behavior.  */
-      if (TREE_CODE (expr) == VIEW_CONVERT_EXPR
-	  && !handled_component_p (op))
-	return false;
+      if (TREE_CODE (expr) == VIEW_CONVERT_EXPR)
+	{
+	  /* For VIEW_CONVERT_EXPRs which are allowed here too, we only check
+	     that their operand is not an SSA name or an invariant when
+	     requiring an lvalue (this usually means there is a SRA or IPA-SRA
+	     bug).  Otherwise there is nothing to verify, gross mismatches at
+	     most invoke undefined behavior.  */
+	  if (require_lvalue
+	      && (TREE_CODE (op) == SSA_NAME
+		  || is_gimple_min_invariant (op)))
+	    {
+	      error ("Conversion of an SSA_NAME on the left hand side.");
+	      debug_generic_stmt (expr);
+	      return true;
+	    }
+	  else if (!handled_component_p (op))
+	    return false;
+	}
 
       expr = op;
     }
@@ -2951,7 +2963,8 @@ verify_gimple_call (gimple stmt)
     }
 
   if (gimple_call_lhs (stmt)
-      && !is_gimple_lvalue (gimple_call_lhs (stmt)))
+      && (!is_gimple_lvalue (gimple_call_lhs (stmt))
+	  || verify_types_in_gimple_reference (gimple_call_lhs (stmt), true)))
     {
       error ("invalid LHS in gimple call");
       return true;