diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2012-09-28 22:20:39 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2012-09-28 22:20:39 +0000 |
commit | e3953a6610f209be57f6c7595441d38559b433b1 (patch) | |
tree | 95fad6fe9bc8001e902e5b5a03998b9eaeba8976 /gcc/go | |
parent | ddd06f537235203ce3e9f7a2a5e454410317995c (diff) | |
download | gcc-e3953a6610f209be57f6c7595441d38559b433b1.zip gcc-e3953a6610f209be57f6c7595441d38559b433b1.tar.gz gcc-e3953a6610f209be57f6c7595441d38559b433b1.tar.bz2 |
compiler: Fix handling of omitted expression in switch.
From-SVN: r191842
Diffstat (limited to 'gcc/go')
-rw-r--r-- | gcc/go/gofrontend/statements.cc | 29 |
1 files changed, 10 insertions, 19 deletions
diff --git a/gcc/go/gofrontend/statements.cc b/gcc/go/gofrontend/statements.cc index a96e6bd..af34670 100644 --- a/gcc/go/gofrontend/statements.cc +++ b/gcc/go/gofrontend/statements.cc @@ -3313,16 +3313,10 @@ Case_clauses::Case_clause::lower(Block* b, Temporary_statement* val_temp, p != this->cases_->end(); ++p) { - Expression* this_cond; - if (val_temp == NULL) - this_cond = *p; - else - { - Expression* ref = Expression::make_temporary_reference(val_temp, - loc); - this_cond = Expression::make_binary(OPERATOR_EQEQ, ref, *p, loc); - } - + Expression* ref = Expression::make_temporary_reference(val_temp, + loc); + Expression* this_cond = Expression::make_binary(OPERATOR_EQEQ, ref, + *p, loc); if (cond == NULL) cond = this_cond; else @@ -3866,15 +3860,12 @@ Switch_statement::do_lower(Gogo*, Named_object*, Block* enclosing, return Statement::make_statement(val, true); } - Temporary_statement* val_temp; - if (this->val_ == NULL) - val_temp = NULL; - else - { - // var val_temp VAL_TYPE = VAL - val_temp = Statement::make_temporary(NULL, this->val_, loc); - b->add_statement(val_temp); - } + // var val_temp VAL_TYPE = VAL + Expression* val = this->val_; + if (val == NULL) + val = Expression::make_boolean(true, loc); + Temporary_statement* val_temp = Statement::make_temporary(NULL, val, loc); + b->add_statement(val_temp); this->clauses_->lower(b, val_temp, this->break_label()); |