From: ian Date: Sat, 19 Feb 2011 04:36:33 +0000 (+0000) Subject: Don't crash on out of range switch value. X-Git-Tag: upstream/4.9.2~22688 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dc7c37c744a3f82679d65401bc9c8e333f7d248d;p=platform%2Fupstream%2Flinaro-gcc.git Don't crash on out of range switch value. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@170305 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/go/gofrontend/statements.cc b/gcc/go/gofrontend/statements.cc index bb5a6a0..99ed665 100644 --- a/gcc/go/gofrontend/statements.cc +++ b/gcc/go/gofrontend/statements.cc @@ -3212,7 +3212,12 @@ Case_clauses::Case_clause::get_constant_tree(Translate_context* context, mpz_t ival; mpz_init(ival); if (!(*p)->integer_constant_value(true, ival, &itype)) - gcc_unreachable(); + { + // Something went wrong. This can happen with a + // negative constant and an unsigned switch value. + gcc_assert(saw_errors()); + continue; + } gcc_assert(itype != NULL); tree type_tree = itype->get_tree(context->gogo()); tree val = Expression::integer_constant_tree(ival, type_tree);