compiler: Allow multiple blank label definitions.
Fixes golang/go#12316. Reviewed-on: https://go-review.googlesource.com/13907 From-SVN: r227284
This commit is contained in:
parent
f6a665d39f
commit
26343eaf9d
@ -1,4 +1,4 @@
|
|||||||
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
|
|||||||
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
|
|||||||
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*)
|
|||||||
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);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user