Commit 26343eaf by Ian Lance Taylor

compiler: Allow multiple blank label definitions.

    
    Fixes golang/go#12316.
    
    Reviewed-on: https://go-review.googlesource.com/13907

From-SVN: r227284
parent f6a665d3
a1d2cac484f46068b5a6ddf3e041d425a3d25e0c 9ae5835a010a55fba875103be5f4e61485a97099
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -2689,6 +2689,8 @@ class Label ...@@ -2689,6 +2689,8 @@ class Label
void void
define(Location location, Bindings_snapshot* snapshot) define(Location location, Bindings_snapshot* snapshot)
{ {
if (this->is_dummy_label())
return;
go_assert(Linemap::is_unknown_location(this->location_) go_assert(Linemap::is_unknown_location(this->location_)
&& this->snapshot_ == NULL); && this->snapshot_ == NULL);
this->location_ = location; this->location_ = location;
...@@ -2709,6 +2711,11 @@ class Label ...@@ -2709,6 +2711,11 @@ class Label
static Label* static Label*
create_dummy_label(); create_dummy_label();
// Return TRUE if this is a dummy label.
bool
is_dummy_label() const
{ return this->name_ == "_"; }
private: private:
// The name of the label. // The name of the label.
std::string name_; std::string name_;
......
...@@ -3080,6 +3080,11 @@ Label_statement::do_traverse(Traverse*) ...@@ -3080,6 +3080,11 @@ Label_statement::do_traverse(Traverse*)
Bstatement* Bstatement*
Label_statement::do_get_backend(Translate_context* context) Label_statement::do_get_backend(Translate_context* context)
{ {
if (this->label_->is_dummy_label())
{
Bexpression* bce = context->backend()->boolean_constant_expression(false);
return context->backend()->expression_statement(bce);
}
Blabel* blabel = this->label_->get_backend_label(context); Blabel* blabel = this->label_->get_backend_label(context);
return context->backend()->label_definition_statement(blabel); return context->backend()->label_definition_statement(blabel);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment