Commit bedcedc1 by Ian Lance Taylor

compiler: Fix handling of indirection of circular types.

From-SVN: r184686
parent ce842ad6
......@@ -4705,7 +4705,10 @@ Unary_expression::do_get_tree(Translate_context* context)
// need to check for nil. We don't bother to check for small
// structs because we expect the system to crash on a nil
// pointer dereference.
HOST_WIDE_INT s = int_size_in_bytes(TREE_TYPE(TREE_TYPE(expr)));
tree target_type_tree = TREE_TYPE(TREE_TYPE(expr));
if (!VOID_TYPE_P(target_type_tree))
{
HOST_WIDE_INT s = int_size_in_bytes(target_type_tree);
if (s == -1 || s >= 4096)
{
if (!DECL_P(expr))
......@@ -4724,10 +4727,11 @@ Unary_expression::do_get_tree(Translate_context* context)
NULL_TREE),
expr);
}
}
// If the type of EXPR is a recursive pointer type, then we
// need to insert a cast before indirecting.
if (TREE_TYPE(TREE_TYPE(expr)) == ptr_type_node)
if (VOID_TYPE_P(target_type_tree))
{
Type* pt = this->expr_->type()->points_to();
tree ind = type_to_tree(pt->get_backend(context->gogo()));
......
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