From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 62310 invoked by alias); 20 Oct 2015 05:52:39 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 62297 invoked by uid 89); 20 Oct 2015 05:52:37 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Tue, 20 Oct 2015 05:52:36 +0000 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id EE8292D1270; Tue, 20 Oct 2015 05:52:34 +0000 (UTC) Received: from localhost.localdomain (ovpn-113-75.phx2.redhat.com [10.3.113.75]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t9K5qYnj032381; Tue, 20 Oct 2015 01:52:34 -0400 Subject: Re: [PATCH] c/67925 - update documentation on `inline' To: Arkadiusz Drabczyk , Martin Sebor References: <20151013224721.GA540@comp.lan> <561E687B.8000705@gmail.com> <20151014214245.GB20411@comp.lan> <561EF0BB.7090808@gmail.com> <20151015122510.GA4459@comp.lan> Cc: gcc-patches@gcc.gnu.org From: Jeff Law Message-ID: <5625D6A2.7060307@redhat.com> Date: Tue, 20 Oct 2015 05:55:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 In-Reply-To: <20151015122510.GA4459@comp.lan> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2015-10/txt/msg01819.txt.bz2 On 10/15/2015 06:25 AM, Arkadiusz Drabczyk wrote: > On Wed, Oct 14, 2015 at 06:18:03PM -0600, Martin Sebor wrote: >> >On 10/14/2015 03:42 PM, Arkadiusz Drabczyk wrote: >>> > >On Wed, Oct 14, 2015 at 08:36:43AM -0600, Martin Sebor wrote: >>>> > >>On 10/13/2015 04:47 PM, Arkadiusz Drabczyk wrote: >>>>> > >>>* gcc/doc/extend.texi: documentation says that functions declared >>>>> > >>>`inline' would not be integrated if they are called before they are >>>>> > >>>defined or if they are recursive. Both of these statements is now >>>>> > >>>false as shown in examples on Bugzilla. >>>> > >> >>>> > >>It might also be worth updating the note in the subsequent >>>> > >>paragraph and removing the mention of variable-length data types >>>> > >>which no longer prevent inlining. >>> > > >>> > >Done. I also removed the mention of nested functions as the following >>> > >code compiled with GCC 6.0 doesn't give any warning with -O2 -Winline >>> > >and main() is the only function defined in assembler code: >> > >> >I think this is the Ada-specific warning I mentioned (see >> >check_inlining_for_nested_subprog in gcc/ada/gcc-interface/trans.c) >> >so the part about nested functions needs to stay. > Ok, I brought it back. > >>>> > >> = G_("function %q+F can never be inlined because " >>>> > >> "it uses non-local goto"); >>> > > >>> > >I tested of all of these and listed them in the documentation but >>> > >wasn't able to reproduce this one. The following code does not give >>> > >any warning with -O2 -Winline: >> > >> >The warning above is issued for non-local and computed goto. You can >> >find examples of both in the test suite (find gcc/testsuite/ -name >> >"*goto*.[cC]") > Aha, ok, I just thought that longjmp() counts as a non-local goto > here. Indeed, this code invokes `function 'bar' can never be inlined > because it uses non-local goto' with -O2 -Winline (but only if > function that contains goto is nested, otherwise it fails to compile): > > #include > #include > > int main (void) > { > __label__ l1; > > void foo (void) > { > > inline void bar (void) > { > puts ("goto l1"); > goto l1; > } > > bar (); > } > > foo (); > abort (); > l1: > puts ("label l1"); > return 0; > } > > I brought back a mention of nonlocal goto and added a mention of > __builtin_longjmp() as the usual longjmp() does not prevent inlining. Thanks Arkadiusz & Martin. I committed this version to the trunk. jeff