From: ian Date: Mon, 31 Mar 2008 17:38:38 +0000 (+0000) Subject: * cp-demangle.c (d_substitution): Correct overflow check to avoid X-Git-Url: http://git.sourceforge.jp/view?a=commitdiff_plain;ds=sidebyside;h=a8c4f791cafca77348c20a017d3509b0b743750e;p=pf3gnuchains%2Fgcc-fork.git * cp-demangle.c (d_substitution): Correct overflow check to avoid -fstrict-overflow optimizations. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@133761 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index c85691c40e1..0e8424d56e8 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,8 @@ +2008-03-31 Ian Lance Taylor + + * cp-demangle.c (d_substitution): Correct overflow check to avoid + -fstrict-overflow optimizations. + 2008-03-27 Paolo Bonzini * configure.ac (frags): Don't set, use frag instead. diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c index edcfedca7a5..71a28ab539b 100644 --- a/libiberty/cp-demangle.c +++ b/libiberty/cp-demangle.c @@ -2681,21 +2681,24 @@ d_substitution (struct d_info *di, int prefix) c = d_next_char (di); if (c == '_' || IS_DIGIT (c) || IS_UPPER (c)) { - int id; + unsigned int id; id = 0; if (c != '_') { do { + unsigned int new_id; + if (IS_DIGIT (c)) - id = id * 36 + c - '0'; + new_id = id * 36 + c - '0'; else if (IS_UPPER (c)) - id = id * 36 + c - 'A' + 10; + new_id = id * 36 + c - 'A' + 10; else return NULL; - if (id < 0) + if (new_id < id) return NULL; + id = new_id; c = d_next_char (di); } while (c != '_'); @@ -2703,7 +2706,7 @@ d_substitution (struct d_info *di, int prefix) ++id; } - if (id >= di->next_sub) + if (id >= (unsigned int) di->next_sub) return NULL; ++di->did_subs;