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 ()); }