Discussion:
GNAT Error?
(too old to reply)
Jeffrey R.Carter
2024-02-16 22:51:33 UTC
Permalink
I have this code:

package Alloc_Err is
type RT is record
F1 : Integer;
F2 : Integer;
end record;

type Grid is array (Positive range <>, Positive range <>) of RT with
Dynamic_Predicate => Grid'First (1) = 1 and Grid'First (2) = 1;

procedure What;
end Alloc_Err;

package Alloc_Err is
type RT is record
F1 : Integer;
F2 : Integer;
end record;

type Grid is array (Positive range <>, Positive range <>) of RT with
Dynamic_Predicate => Grid'First (1) = 1 and Grid'First (2) = 1;

procedure What;
end Alloc_Err;

and GNAT 12.3.0 and 13.2.0 say

alloc_err.adb:5:26: error: invalid use of subtype mark in expression or call

This doesn't happen if the Dynamic_Predicate is removed. This looks like an
error to me, but I thought I'd better see if there's something I've missed.
--
Jeff Carter
"I like it when the support group complains that they have
insufficient data on mean time to repair bugs in Ada software."
Robert I. Eachus
91
Niklas Holsti
2024-02-16 23:26:34 UTC
Permalink
Post by Jeffrey R.Carter
package Alloc_Err is
   type RT is record
      F1 : Integer;
      F2 : Integer;
   end record;
   type Grid is array (Positive range <>, Positive range <>) of RT with
      Dynamic_Predicate => Grid'First (1) = 1 and Grid'First (2) = 1;
   procedure What;
end Alloc_Err;
package Alloc_Err is
   type RT is record
      F1 : Integer;
      F2 : Integer;
   end record;
   type Grid is array (Positive range <>, Positive range <>) of RT with
      Dynamic_Predicate => Grid'First (1) = 1 and Grid'First (2) = 1;
   procedure What;
end Alloc_Err;
and GNAT 12.3.0 and 13.2.0 say
alloc_err.adb:5:26: error: invalid use of subtype mark in expression or call
This doesn't happen if the Dynamic_Predicate is removed. This looks like
an error to me, but I thought I'd better see if there's something I've
missed.
You showed two copies of the declaration (spec) of package Alloc_Err,
but you did not show the body of the package. Based on the error message
pointing to alloc_err.adb (and not .ads), GNAT thinks the error is in
the body. Please show the body of the package.
Randy Brukardt
2024-02-17 06:04:21 UTC
Permalink
I don't see anything wrong with that off-hand. It's probably a compiler bug
of some sort. - Randy.
You showed two copies of the declaration (spec) of package Alloc_Err, but
you did not show the body of the package. Based on the error message
pointing to alloc_err.adb (and not .ads), GNAT thinks the error is in the
body. Please show the body of the package.
Oops. Well, I've managed to simplify the reproducer to
procedure Alloc2 is
type Grid is array (Positive range <>, Positive range <>) of Integer
with
Dynamic_Predicate => Grid'First (1) = 1 and Grid'First (2) = 1;
type Grid_Ptr is access Grid;
Data : Grid_Ptr := new Grid (1 .. 10, 1 .. 20);
begin -- Alloc2
null;
end Alloc2;
which results in
alloc2.adb:7:23: error: invalid use of subtype mark in expression or call
Line 7 is the declaration of Data.
--
Jeff Carter
"I like it when the support group complains that they have
insufficient data on mean time to repair bugs in Ada software."
Robert I. Eachus
91
Simon Wright
2024-02-18 09:48:57 UTC
Permalink
Post by Randy Brukardt
I don't see anything wrong with that off-hand. It's probably a
compiler bug of some sort. - Randy.
That's what I thought. I know some people have GNAT 14. I'll wait a
bit to see if any of them report on if this is still the case before
reporting it.
None of GCC 11.2.0, 12.2.0, 13.2.0, 14.0.1 report errors with
alloc2.adb.

These are all apple-darwin, but the error reported is going to be a
front-end error.
Simon Wright
2024-02-18 09:59:47 UTC
Permalink
Post by Simon Wright
Post by Randy Brukardt
I don't see anything wrong with that off-hand. It's probably a
compiler bug of some sort. - Randy.
That's what I thought. I know some people have GNAT 14. I'll wait a
bit to see if any of them report on if this is still the case before
reporting it.
None of GCC 11.2.0, 12.2.0, 13.2.0, 14.0.1 report errors with
alloc2.adb.
These are all apple-darwin, but the error reported is going to be a
front-end error.
Oh, you didn't say that -gnata is needed to provoke the error, though
it's not really a surprise.

Now, only GCC 11.2.0 doesn't have the error; so it's a regression in GCC
12.
Jeffrey R.Carter
2024-02-18 11:48:53 UTC
Permalink
Post by Simon Wright
Oh, you didn't say that -gnata is needed to provoke the error, though
it's not really a surprise.
Now, only GCC 11.2.0 doesn't have the error; so it's a regression in GCC
12.
Sorry, I should have given my compilation options. You're right that I used
-gnata. But I did say it was related to the Dynamic_Predicate.

As you have GNAT 14 and I don't, perhaps it would be best for you to report this.
--
Jeff Carter
"We'll make Rock Ridge think it's a chicken
that got caught in a tractor's nuts!"
Blazing Saddles
87
Simon Wright
2024-02-18 14:33:51 UTC
Permalink
Post by Jeffrey R.Carter
Post by Simon Wright
Oh, you didn't say that -gnata is needed to provoke the error, though
it's not really a surprise.
Now, only GCC 11.2.0 doesn't have the error; so it's a regression in GCC
12.
Sorry, I should have given my compilation options. You're right that I
used -gnata. But I did say it was related to the Dynamic_Predicate.
As you have GNAT 14 and I don't, perhaps it would be best for you to report this.
See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113979
Simon Wright
2024-03-07 14:54:50 UTC
Permalink
Post by Simon Wright
Post by Jeffrey R.Carter
Post by Simon Wright
Oh, you didn't say that -gnata is needed to provoke the error, though
it's not really a surprise.
Now, only GCC 11.2.0 doesn't have the error; so it's a regression in GCC
12.
Sorry, I should have given my compilation options. You're right that I
used -gnata. But I did say it was related to the Dynamic_Predicate.
As you have GNAT 14 and I don't, perhaps it would be best for you to report this.
See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113979
And now fixed on all "active" branches! (that's 11, 12, 13 & master,
judging by the comments)

Of course, it takes a while for this to percolate through to a release.
Jeffrey R.Carter
2024-03-07 15:06:18 UTC
Permalink
Post by Simon Wright
Post by Simon Wright
See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113979
And now fixed on all "active" branches! (that's 11, 12, 13 & master,
judging by the comments)
Of course, it takes a while for this to percolate through to a release.
Cool. Thanks for reporting this.
--
Jeff Carter
"C's solution to this [variable-sized array parameters] has real
problems, and people who are complaining about safety definitely
have a point."
Dennis Ritchie
25
Loading...