Commit c623f837 by Ian Lance Taylor

compiler: Permit omitting &T in composite literal.

From-SVN: r182331
parent e6f52784
...@@ -12783,14 +12783,23 @@ Composite_literal_expression::do_lower(Gogo* gogo, Named_object* function, ...@@ -12783,14 +12783,23 @@ Composite_literal_expression::do_lower(Gogo* gogo, Named_object* function,
} }
} }
Type *pt = type->points_to();
bool is_pointer = false;
if (pt != NULL)
{
is_pointer = true;
type = pt;
}
Expression* ret;
if (type->is_error()) if (type->is_error())
return Expression::make_error(this->location()); return Expression::make_error(this->location());
else if (type->struct_type() != NULL) else if (type->struct_type() != NULL)
return this->lower_struct(gogo, type); ret = this->lower_struct(gogo, type);
else if (type->array_type() != NULL) else if (type->array_type() != NULL)
return this->lower_array(type); ret = this->lower_array(type);
else if (type->map_type() != NULL) else if (type->map_type() != NULL)
return this->lower_map(gogo, function, inserter, type); ret = this->lower_map(gogo, function, inserter, type);
else else
{ {
error_at(this->location(), error_at(this->location(),
...@@ -12798,6 +12807,11 @@ Composite_literal_expression::do_lower(Gogo* gogo, Named_object* function, ...@@ -12798,6 +12807,11 @@ Composite_literal_expression::do_lower(Gogo* gogo, Named_object* function,
"for composite literal")); "for composite literal"));
return Expression::make_error(this->location()); return Expression::make_error(this->location());
} }
if (is_pointer)
ret = Expression::make_heap_composite(ret, this->location());
return ret;
} }
// Lower a struct composite literal. // Lower a struct composite literal.
......
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