[Ada] Missing error on non-limited derived type with limited component
commit71bcd9afac02668910c56f74d30759d5eda052eb
authorpmderodat <pmderodat@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 26 Sep 2018 09:17:41 +0000 (26 09:17 +0000)
committerpmderodat <pmderodat@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 26 Sep 2018 09:17:41 +0000 (26 09:17 +0000)
tree0584f24168e63006c9ea697118bede6d1482bf9f
parent6591af037f92df27d5fc710c0c4e4acb94e7883b
[Ada] Missing error on non-limited derived type with limited component

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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@264616 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ada/ChangeLog
gcc/ada/sem_ch3.adb