This patch fixes a missing error on a type extension with limited
components, when the parent type is a derived limited interface. This
may allow the unit to improperly compile, but may lead to bind-time
errors when compiling a client of that unit.
Compiling p.adb must yield:
keys.ads:8:06: extension of nonlimited type cannot have limited components
keys.ads:8:06: limitedness is not inherited from limited interface
keys.ads:8:06: add "limited" to type indication
----
with Keys;
procedure P is
begin
null;
end;
----
with GNAT.Semaphores;
package Keys is
type Ref0 is limited interface;
type Ref2 is limited interface and Ref0;
type Object is new Ref2 with record
Lock : aliased GNAT.Semaphores.Binary_Semaphore
(True, GNAT.Semaphores.Default_Ceiling);
end record;
end;
2018-09-26 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch3.adb (Is_Onown_Limited): A derived type whose parent P
is a derived limited record is not itself limited if P is a
derived limited interface.
From-SVN: r264616
+2018-09-26 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_ch3.adb (Is_Onown_Limited): A derived type whose parent P
+ is a derived limited record is not itself limited if P is a
+ derived limited interface.
+
2018-09-26 Eric Botcazou <ebotcazou@adacore.com>
* sem_ch7.adb (Has_Referencer): Remove Top_Level parameter and
return True;
-- Else the type may have a limited interface progenitor, but a
- -- limited record parent.
+ -- limited record parent that is not an interface.
- elsif R /= P and then Is_Limited_Record (P) then
+ elsif R /= P
+ and then Is_Limited_Record (P)
+ and then not Is_Interface (P)
+ then
return True;
else