comp.lang.ada
 help / color / mirror / Atom feed
From: Jere <jhb.chat@gmail.com>
Subject: Re: expression functions and raise expressions
Date: Wed, 7 Mar 2018 14:39:02 -0800 (PST)
Date: 2018-03-07T14:39:02-08:00	[thread overview]
Message-ID: <428eeffb-0054-4693-9ef3-fa218125fb76@googlegroups.com> (raw)
In-Reply-To: <p7k8rs$uj4$1@franka.jacob-sparre.dk>

On Monday, March 5, 2018 at 3:21:18 PM UTC-5, Randy Brukardt wrote:
> "Jere" wrote in message 
> >I wanted to double check if I am reading the RM correctly.
> > From 6.8 2/4, I see that a function expression can consist entirely
> > of an (expression)
> >
> > Section 4.4 2 says that an expression can be made up of a single
> > (relation)
> >
> > Section 4.4 3/4 further says a relation can be a raise expression.
> >
> > Given that, I expect that the following declaration/definition is correct:
> >
> >      function Reference
> >         (Container : aliased in out Container_Type;
> >          Cursor    :                Cursor_Type)
> >          return Reference_Type
> >      is (raise My_Exception
> >          with "Reference not supported for Ordered_Sets")
> >      with Inline;
> >
> > GNAT GPL 2017 accepts it, but FSF GNAT 7.2 for mingw64 on Win10
> > gives some errors:
> > test.ads:328:11: (Ada 2005) cannot copy object of a limited type (RM-2005 
> > 6.5(5.5/2))
> > test.ads:328:11: return by reference not permitted in Ada 2005
> >
> > NOTE:  Reference_Type is untagged limited discriminated null
> > record with Implicit_Dereference defined.  Also note that a similar
> > function that returns an aggregate initialization compiles fine
> > on both versions.
> >
> > I am compiling with Ada2012 mode (-gnat12 option)
> >
> > I believe this to be a bug in GCC 7.2 for mingw64, but wanted to
> > make sure I wasn't misreading the RM.
> If "Reference_Type" is a limited type, then this would have been correct at 
> one point: we forgot to allow raise expressions in limited contexts. (Recall 
> that returning a limited expression from a function is "built-in-place" and 
> only allows certain expressions, copying objects [for instance] is not 
> allowed.) I noticed this when writing some ACATS tests in this area, and it 
> was fixed with a recent Binding Interpretation (correction). But it won't 
> formally be adopted until Ada 2020, so an Ada 2012 compiler is ""correct" if 
> it allows or rejects such a use (as corrections can, but don't have to be, 
> applied to the existing language).
> 
> For a non-limited type, this should be just fine. But as a raise expression 
> matches any type (and thus is different than any previous Ada expression), 
> it might be buggy in some odd case.
> 
>                               Randy.
> 
Thanks!

It was a limited type.  I guess for now, I won't use them in expression
functions then so I can keep it portable.  It was just convenient, but
not a show stopper.


      reply	other threads:[~2018-03-07 22:39 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-03 18:39 expression functions and raise expressions Jere
2018-03-03 20:03 ` Jeffrey R. Carter
2018-03-03 22:53   ` Jere
2018-03-03 20:54 ` Simon Wright
2018-03-03 22:54   ` Jere
2018-03-05 20:21 ` Randy Brukardt
2018-03-07 22:39   ` Jere [this message]
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox