re PR ada/17985 (GNAT accepts extension aggregate where expexted type is not extension)

gcc/ada/
	PR ada/17985
	* sem_aggr.adb (Valid_Ancestor_Type): A type is not an ancestor of
	itself.

    gcc/testsuite/
	PR ada/17985
	* gnat.dg/ancestor_type.ads, gnat.dg/ancestor_type.adb: New test.

From-SVN: r134244
This commit is contained in:
Samuel Tardieu 2008-04-13 18:15:20 +00:00 committed by Samuel Tardieu
parent 3354f96dac
commit 92d4508a7d
5 changed files with 40 additions and 1 deletions

View file

@ -1,3 +1,9 @@
2008-04-13 Samuel Tardieu <sam@rfc1149.net>
PR ada/17985
* sem_aggr.adb (Valid_Ancestor_Type): A type is not an ancestor of
itself.
2008-04-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
* sfn_scan.adb, sfn_scan.ads, sinfo.ads,

View file

@ -2159,7 +2159,9 @@ package body Sem_Aggr is
Imm_Type := Etype (Base_Type (Imm_Type));
end loop;
if Etype (Imm_Type) /= Base_Type (A_Type) then
if Etype (Imm_Type) /= Base_Type (A_Type)
or else Base_Type (Typ) = Base_Type (A_Type)
then
Error_Msg_NE ("expect ancestor type of &", A, Typ);
return False;
else

View file

@ -1,3 +1,8 @@
2008-04-13 Samuel Tardieu <sam@rfc1149.net>
PR ada/17985
* gnat.dg/ancestor_type.ads, gnat.dg/ancestor_type.adb: New test.
2008-04-12 Andrew Pinski <pinskia@gmail.com>
* gcc.target/powerpc/darwin-save-world-1.c: New test.

View file

@ -0,0 +1,13 @@
-- { dg-do compile }
package body Ancestor_Type is
package body B is
function make return T is
begin
return (T with n => 0); -- { dg-error "expect ancestor" }
end make;
end B;
end Ancestor_Type;

View file

@ -0,0 +1,13 @@
package Ancestor_Type is
type T is tagged private;
package B is
function make return T;
end B;
private
type T is tagged record
n: Natural;
end record;
end Ancestor_Type;