From patchwork Thu Apr 30 17:44:12 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Lance Taylor X-Patchwork-Id: 466661 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id B20BC140320 for ; Fri, 1 May 2015 03:44:23 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass reason="1024-bit key; unprotected key" header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=vkbw3MPA; dkim-adsp=none (unprotected policy); dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:date:message-id:subject:from:to:content-type; q= dns; s=default; b=PLOTqzRWGg2s12aARkDTFt6zIUHg9eh3epCSNkiqUFipSP 9TnUFDBY4xoj0qL6u5CpFHCuBG9DmJuf/Tugjm16C1Q77Gm0LpJ15u5q7mT/3Vag MBjaDeoTFJiYp3xd5lEzTVN7CGwOAOXoD1HEZNK3b3RQGIx7QBU9u5Q9sm55g= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:date:message-id:subject:from:to:content-type; s= default; bh=7c4VYe2/kwmyGFkRZRRugWS2B4s=; b=vkbw3MPAfoAFsi2qju1w MWzWx9EonSGaGQft59colR5Oe1739acWgPtLPliRKVdoZUebfI1EaVTbRFEDAZQM EoNRYooLxhZEUmyYpgDS1xhO65ia2iTipzZUfY4YP6s7AiI61Y747eQuqfkkzv+p OgX3bGbzetZUNH+fhWUFFi8= Received: (qmail 111432 invoked by alias); 30 Apr 2015 17:44:16 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 111418 invoked by uid 89); 30 Apr 2015 17:44:15 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.4 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, SPF_PASS, URIBL_BLACK autolearn=no version=3.3.2 X-HELO: mail-qk0-f173.google.com Received: from mail-qk0-f173.google.com (HELO mail-qk0-f173.google.com) (209.85.220.173) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 30 Apr 2015 17:44:14 +0000 Received: by qku63 with SMTP id 63so37504193qku.3 for ; Thu, 30 Apr 2015 10:44:12 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to :content-type; bh=hxUby08fRpfPlgDkxzX6ItfchW7p3febhBrP3Q2Sv3Q=; b=ZRKtAaZifv8Yr3QqSvrTZD5Op0+Mx6ZURcrzmNp8qMNQHLhgGVx1OzOeByewPwolcl g3LXNJIbrhuE3y6Cet2o30Vrdqz9p48U9/KbY6Eu35TQHnI6nU9gaRjviCFfWjwiKc2a an/BjAHMPxHzkz738oL0URMLLJ1uKQHql9yKiY3IiwObrJT2HDPvjyS/S8X8lX6jvvOj lQZcBgMJzkbT0axY1VRzgKAd0/67iTb3Teyo1lgRzucEjui7jeQ46+Eov7IwxnORbr/8 sLj03SGQ7eL6vAyk8Vt/6MhyHQEdMQjkiqQUTLUzue2PA4hpu8H0ZQv7naxTWr526/GO u6kg== X-Gm-Message-State: ALoCoQkW319lEWvG/D40y0UGlMlbBOTtRMxhWXBUj0xG8OIM+mqQq+tBcC0VgTvNa7h3SsbC6rjv MIME-Version: 1.0 X-Received: by 10.229.16.69 with SMTP id n5mr2657135qca.25.1430415852711; Thu, 30 Apr 2015 10:44:12 -0700 (PDT) Received: by 10.96.150.99 with HTTP; Thu, 30 Apr 2015 10:44:12 -0700 (PDT) Date: Thu, 30 Apr 2015 10:44:12 -0700 Message-ID: Subject: Go patch committed: escape analysis of function values and conversions From: Ian Lance Taylor To: gcc-patches , "gofrontend-dev@googlegroups.com" This patch from Chris Manghane improves the analysis of function values and type conversions. Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu. Committed to mainline. Ian diff -r 4e348e019b8f go/escape.cc --- a/go/escape.cc Thu Apr 30 10:21:02 2015 -0700 +++ b/go/escape.cc Thu Apr 30 10:43:24 2015 -0700 @@ -906,6 +906,8 @@ continue; else if ((*p)->call_expression() != NULL) this->handle_call(object, *p); + else if ((*p)->func_expression() != NULL) + composite_args.push_back((*p)->func_expression()->named_object()); else if ((*p)->is_composite_literal() || (*p)->heap_expression() != NULL) this->handle_composite_literal(object, *p); @@ -949,21 +951,24 @@ p != defs->end(); ++p) { - if (p->val == NULL) + Expression* def = p->val; + if (def == NULL) continue; - if (p->val->func_expression() != NULL) + if (def->conversion_expression() != NULL) + def = def->conversion_expression()->expr(); + if (def->func_expression() != NULL) { // VAR is being defined as a function object. - Named_object* fn = p->val->func_expression()->named_object(); + Named_object* fn = def->func_expression()->named_object(); Node* fn_node = this->gogo_->add_connection_node(fn); var_node->add_edge(fn_node); } - else if(p->val->is_composite_literal() - || p->val->heap_expression() != NULL) - this->handle_composite_literal(var, p->val); + else if(def->is_composite_literal() + || def->heap_expression() != NULL) + this->handle_composite_literal(var, def); - Named_object* ref = this->resolve_var_reference(p->val); + Named_object* ref = this->resolve_var_reference(def); if (ref == NULL) continue;