diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 84a105e1bd17b87b4121cba57eb45b54fd01da70..6d2a558dda91bf9086e206c4ba47e5e0f3c05f0b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2014-07-03  Jakub Jelinek  <jakub@redhat.com>
+
+	* gcov-io.c (gcov_read_words): Don't call memmove if excess is 0.
+	* data-streamer-in.c (streamer_read_hwi): Shift UHWI 1 instead of
+	HWI 1 and negate the unsigned value.
+	* expmed.c (expand_sdiv_pow2): For modes wider than word always
+	use AND instead of shift.
+	* wide-int-print.cc (print_decs): Negate UHWI instead of HWI.
+
 2014-07-03  Marek Polacek  <polacek@redhat.com>
 
 	* doc/invoke.texi (-fsanitize=bounds): Tweak wording.
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 672c4e8c80c9eaac9091da0c241d2f19ac5f8c41..d667ed862515b08a9ce131765dce30571bd3e844 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,8 @@
+2014-07-03  Jakub Jelinek  <jakub@redhat.com>
+
+	* c-ada-spec.c (dump_ada_nodes): Don't call qsort if 
+	comments->count <= 1, as comments->entries might be NULL.
+
 2014-07-01  Marek Polacek  <polacek@redhat.com>
 
 	* c.opt (Wint-conversion): New option.
diff --git a/gcc/c-family/c-ada-spec.c b/gcc/c-family/c-ada-spec.c
index a21bc498d075ea5daaacec36b42032e1ed410943..5142f07a7ca385029acbb1a0d918ccb67b30dca6 100644
--- a/gcc/c-family/c-ada-spec.c
+++ b/gcc/c-family/c-ada-spec.c
@@ -636,8 +636,9 @@ dump_ada_nodes (pretty_printer *pp, const char *source_file)
   comments = cpp_get_comments (parse_in);
 
   /* Sort the comments table by sloc.  */
-  qsort (comments->entries, comments->count, sizeof (cpp_comment),
-	 compare_comment);
+  if (comments->count > 1)
+    qsort (comments->entries, comments->count, sizeof (cpp_comment),
+	   compare_comment);
 
   /* Interleave comments and declarations in line number order.  */
   i = j = 0;
diff --git a/gcc/data-streamer-in.c b/gcc/data-streamer-in.c
index 1f74278fa80d8a8532c229bcb0de7719be872c16..7bec1b1519a8dffbc8d8086404fe17d7d52d4f0f 100644
--- a/gcc/data-streamer-in.c
+++ b/gcc/data-streamer-in.c
@@ -174,7 +174,7 @@ streamer_read_hwi (struct lto_input_block *ib)
       if ((byte & 0x80) == 0)
 	{
 	  if ((shift < HOST_BITS_PER_WIDE_INT) && (byte & 0x40))
-	    result |= - ((HOST_WIDE_INT)1 << shift);
+	    result |= - (HOST_WIDE_INT_1U << shift);
 
 	  return result;
 	}
diff --git a/gcc/expmed.c b/gcc/expmed.c
index 861626ed9220c92d1ad5cebd23d9bce2be07b7a4..36c43463de1a4348e36c1e4bf1676f3355c33f55 100644
--- a/gcc/expmed.c
+++ b/gcc/expmed.c
@@ -3795,8 +3795,9 @@ expand_sdiv_pow2 (enum machine_mode mode, rtx op0, HOST_WIDE_INT d)
 
       temp = gen_reg_rtx (mode);
       temp = emit_store_flag (temp, LT, op0, const0_rtx, mode, 0, -1);
-      if (shift_cost (optimize_insn_for_speed_p (), mode, ushift)
-	  > COSTS_N_INSNS (1))
+      if (GET_MODE_BITSIZE (mode) >= BITS_PER_WORD
+	  || shift_cost (optimize_insn_for_speed_p (), mode, ushift)
+	     > COSTS_N_INSNS (1))
 	temp = expand_binop (mode, and_optab, temp, gen_int_mode (d - 1, mode),
 			     NULL_RTX, 0, OPTAB_LIB_WIDEN);
       else
diff --git a/gcc/gcov-io.c b/gcc/gcov-io.c
index 1fdb9583ee8abd3de50e92a5d1a3d179bade8a73..547276fbcf0b732ed02163d8d57c677b846e5021 100644
--- a/gcc/gcov-io.c
+++ b/gcc/gcov-io.c
@@ -489,14 +489,15 @@ gcov_read_words (unsigned words)
   if (excess < words)
     {
       gcov_var.start += gcov_var.offset;
-#if IN_LIBGCOV
       if (excess)
 	{
+#if IN_LIBGCOV
 	  memcpy (gcov_var.buffer, gcov_var.buffer + gcov_var.offset, 4);
-	}
 #else
-      memmove (gcov_var.buffer, gcov_var.buffer + gcov_var.offset, excess * 4);
+	  memmove (gcov_var.buffer, gcov_var.buffer + gcov_var.offset,
+		   excess * 4);
 #endif
+	}
       gcov_var.offset = 0;
       gcov_var.length = excess;
 #if IN_LIBGCOV
diff --git a/gcc/wide-int-print.cc b/gcc/wide-int-print.cc
index c79c781d3ef6a47bd4e1e1cee9983de03aa5458a..9b2893a99b1d041392f8a77d147eb38db58e9fd4 100644
--- a/gcc/wide-int-print.cc
+++ b/gcc/wide-int-print.cc
@@ -62,7 +62,8 @@ print_decs (const wide_int_ref &wi, char *buf)
       || (wi.get_len () == 1))
     {
       if (wi::neg_p (wi))
-      	sprintf (buf, "-" HOST_WIDE_INT_PRINT_UNSIGNED, -wi.to_shwi ());
+      	sprintf (buf, "-" HOST_WIDE_INT_PRINT_UNSIGNED,
+		 -(unsigned HOST_WIDE_INT) wi.to_shwi ());
       else
 	sprintf (buf, HOST_WIDE_INT_PRINT_DEC, wi.to_shwi ());
     }