aboutsummaryrefslogtreecommitdiff
path: root/gcc/go
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2012-09-28 22:20:39 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2012-09-28 22:20:39 +0000
commite3953a6610f209be57f6c7595441d38559b433b1 (patch)
tree95fad6fe9bc8001e902e5b5a03998b9eaeba8976 /gcc/go
parentddd06f537235203ce3e9f7a2a5e454410317995c (diff)
downloadgcc-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.cc29
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());