From 3db31fd1cc7acf87e092c0bbeba37d234c77b83b Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Sat, 22 Mar 2014 15:03:20 +0100 Subject: [PATCH] toplev.c (init_local_tick): Avoid signed integer multiplication overflow. * toplev.c (init_local_tick): Avoid signed integer multiplication overflow. * genautomata.c (reserv_sets_hash_value): Fix rotate idiom, avoid shift by first operand's bitsize. From-SVN: r208765 --- gcc/ChangeLog | 7 +++++++ gcc/genautomata.c | 2 +- gcc/toplev.c | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ba749275b1a..dbd497177bb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2014-03-22 Jakub Jelinek + + * toplev.c (init_local_tick): Avoid signed integer multiplication + overflow. + * genautomata.c (reserv_sets_hash_value): Fix rotate idiom, avoid + shift by first operand's bitsize. + 2014-03-21 Jakub Jelinek PR target/60610 diff --git a/gcc/genautomata.c b/gcc/genautomata.c index 9db86155008..0c61278ff4c 100644 --- a/gcc/genautomata.c +++ b/gcc/genautomata.c @@ -3494,7 +3494,7 @@ reserv_sets_hash_value (reserv_sets_t reservs) { reservs_num--; hash_value += ((*reserv_ptr >> i) - | (*reserv_ptr << ((sizeof (set_el_t) * CHAR_BIT) & -i))); + | (*reserv_ptr << (((sizeof (set_el_t) * CHAR_BIT) - 1) & -i))); i++; if (i == sizeof (set_el_t) * CHAR_BIT) i = 0; diff --git a/gcc/toplev.c b/gcc/toplev.c index c652522a361..0f7d452f378 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -261,7 +261,7 @@ init_local_tick (void) struct timeval tv; gettimeofday (&tv, NULL); - local_tick = tv.tv_sec * 1000 + tv.tv_usec / 1000; + local_tick = (unsigned) tv.tv_sec * 1000 + tv.tv_usec / 1000; } #else {