From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 88668 invoked by alias); 21 Apr 2015 07:48:59 -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 88658 invoked by uid 89); 21 Apr 2015 07:48:58 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.5 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,T_RP_MATCHES_RCVD autolearn=no version=3.3.2 X-HELO: atrey.karlin.mff.cuni.cz Received: from atrey.karlin.mff.cuni.cz (HELO atrey.karlin.mff.cuni.cz) (195.113.26.193) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 21 Apr 2015 07:48:57 +0000 Received: by atrey.karlin.mff.cuni.cz (Postfix, from userid 4018) id 25F8481F74; Tue, 21 Apr 2015 09:48:53 +0200 (CEST) Date: Tue, 21 Apr 2015 07:48:00 -0000 From: Jan Hubicka To: Tom de Vries Cc: Richard Biener , GCC Patches Subject: Re: [PATCH][PR65802] Mark ifn_va_arg with ECF_NOTHROW Message-ID: <20150421074853.GA9659@atrey.karlin.mff.cuni.cz> References: <5535F7EF.1000305@mentor.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5535F7EF.1000305@mentor.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-IsSubscribed: yes X-SW-Source: 2015-04/txt/msg01122.txt.bz2 > Mark ifn_va_arg with ECF_NOTHROW You can defnitly make it ECF_LEAF too. I wonder if we can make it ECF_CONST or at leat PURE this would help to keep variadic functions const/pure that may be moderately interesting in practice. Honza > > 2015-04-20 Tom de Vries > > PR tree-optimization/65802 > * internal-fn.def (VA_ARG): Add ECF_NOTROW to flags. > > * g++.dg/pr65802.C: New test. > --- > gcc/internal-fn.def | 2 +- > gcc/testsuite/g++.dg/pr65802.C | 29 +++++++++++++++++++++++++++++ > 2 files changed, 30 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/g++.dg/pr65802.C > > diff --git a/gcc/internal-fn.def b/gcc/internal-fn.def > index f557c64..7e19313 100644 > --- a/gcc/internal-fn.def > +++ b/gcc/internal-fn.def > @@ -62,4 +62,4 @@ DEF_INTERNAL_FN (ADD_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) > DEF_INTERNAL_FN (SUB_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) > DEF_INTERNAL_FN (MUL_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) > DEF_INTERNAL_FN (TSAN_FUNC_EXIT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) > -DEF_INTERNAL_FN (VA_ARG, 0, NULL) > +DEF_INTERNAL_FN (VA_ARG, ECF_NOTHROW, NULL) > diff --git a/gcc/testsuite/g++.dg/pr65802.C b/gcc/testsuite/g++.dg/pr65802.C > new file mode 100644 > index 0000000..26e5317 > --- /dev/null > +++ b/gcc/testsuite/g++.dg/pr65802.C > @@ -0,0 +1,29 @@ > +// { dg-do compile } > +// { dg-options "-O0" } > + > +typedef int tf (); > + > +struct S > +{ > + tf m_fn1; > +} a; > + > +void > +fn1 () > +{ > + try > + { > + __builtin_va_list c; > + { > + int *d = __builtin_va_arg (c, int *); > + int **e = &d; > + __asm__("" : "=d"(e)); > + a.m_fn1 (); > + } > + a.m_fn1 (); > + } > + catch (...) > + { > + > + } > +} > -- > 1.9.1 >