diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-02-19 04:36:33 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-02-19 04:36:33 +0000 |
commit | d128a6bbe4b50d1c2d035d4cf59b9ab38f398159 (patch) | |
tree | 32d03f5dc53f17789a73f4a880d70da14e1f2ca7 /gcc/go | |
parent | 6f6961cf116360adc27324d52d6e6a8ccf7c96c2 (diff) | |
download | gcc-d128a6bbe4b50d1c2d035d4cf59b9ab38f398159.zip gcc-d128a6bbe4b50d1c2d035d4cf59b9ab38f398159.tar.gz gcc-d128a6bbe4b50d1c2d035d4cf59b9ab38f398159.tar.bz2 |
Don't crash on out of range switch value.
From-SVN: r170305
Diffstat (limited to 'gcc/go')
-rw-r--r-- | gcc/go/gofrontend/statements.cc | 7 |
1 files changed, 6 insertions, 1 deletions
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); |