sem_ch8.adb (Find_Type): The attribute 'class cannot be applied to an untagged incomplete type that is a...

2010-06-14  Ed Schonberg  <schonberg@adacore.com>

	* sem_ch8.adb (Find_Type): The attribute 'class cannot be applied to
	an untagged incomplete type that is a limited view.

From-SVN: r160741
This commit is contained in:
Ed Schonberg 2010-06-14 13:36:42 +00:00 committed by Arnaud Charlet
parent 5875f8d66e
commit ae24748803
2 changed files with 25 additions and 9 deletions

View File

@ -1,3 +1,8 @@
2010-06-14 Ed Schonberg <schonberg@adacore.com>
* sem_ch8.adb (Find_Type): The attribute 'class cannot be applied to
an untagged incomplete type that is a limited view.
2010-06-14 Sergey Rybin <rybin@adacore.com>
* gnat_ugn.texi: Add description of '-cargs gcc_switches' to gnatstub

View File

@ -5624,7 +5624,19 @@ package body Sem_Ch8 is
-- It is legal to denote the class type of an incomplete
-- type. The full type will have to be tagged, of course.
-- In Ada 2005 this usage is declared obsolescent, so we
-- warn accordingly.
-- warn accordingly. This usage is only legal if the type
-- is completed in the current scope, and not for a limited
-- view of a type.
if not Is_Tagged_Type (T)
and then Ada_Version >= Ada_05
then
if From_With_Type (T) then
Error_Msg_N
("prefix of Class attribute must be tagged", N);
Set_Etype (N, Any_Type);
Set_Entity (N, Any_Type);
return;
-- ??? This test is temporarily disabled (always False)
-- because it causes an unwanted warning on GNAT sources
@ -5632,14 +5644,13 @@ package body Sem_Ch8 is
-- Feature). Once this issue is cleared in the sources, it
-- can be enabled.
if not Is_Tagged_Type (T)
and then Ada_Version >= Ada_05
and then Warn_On_Obsolescent_Feature
and then False
then
Error_Msg_N
("applying 'Class to an untagged incomplete type"
& " is an obsolescent feature (RM J.11)", N);
elsif Warn_On_Obsolescent_Feature
and then False
then
Error_Msg_N
("applying 'Class to an untagged incomplete type"
& " is an obsolescent feature (RM J.11)", N);
end if;
end if;
Set_Is_Tagged_Type (T);