From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: expression functions and raise expressions
Date: Mon, 5 Mar 2018 14:21:15 -0600
Date: 2018-03-05T14:21:15-06:00 [thread overview]
Message-ID: <p7k8rs$uj4$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: 60f20df9-4b33-4f29-829e-2fccb89a650a@googlegroups.com
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.
"Jere" <jhb.chat@gmail.com> wrote in message
news:60f20df9-4b33-4f29-829e-2fccb89a650a@googlegroups.com...
>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.
next prev parent reply other threads:[~2018-03-05 20:21 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 [this message]
2018-03-07 22:39 ` Jere
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox