sem_ch3.adb (Analyze_Object_Declaration): Signal an error when an access to constant is used to initialize an access value.

gcc/ada/
	* sem_ch3.adb (Analyze_Object_Declaration): Signal an error
	when an access to constant is used to initialize an access
	value.

    gcc/testsuite/
	* gnat.dg/specs/access_constant_decl.ads: New test.

From-SVN: r130677
This commit is contained in:
Samuel Tardieu 2007-12-07 14:37:36 +00:00 committed by Samuel Tardieu
parent 2eb160f205
commit 9cc11b58d2
4 changed files with 31 additions and 0 deletions

View File

@ -4,6 +4,10 @@
* sem_ch6.adb (Process_Formals): Prevent an access type formal
to be initialized with an access to constant object.
* sem_ch3.adb (Analyze_Object_Declaration): Signal an error
when an access to constant is used to initialize an access
value.
2007-12-07 Olivier Hainque <hainque@adacore.com>
PR ada/34173

View File

@ -2364,6 +2364,20 @@ package body Sem_Ch3 is
Set_Is_True_Constant (Id, True);
-- If the initialization expression is an access to constant,
-- it cannot be used with an access type.
if Is_Access_Type (Etype (E))
and then Is_Access_Constant (Etype (E))
and then Is_Access_Type (T)
and then not Is_Access_Constant (T)
then
Error_Msg_NE ("object of type& cannot be initialized with " &
"an access-to-constant expression",
E,
T);
end if;
-- If we are analyzing a constant declaration, set its completion
-- flag after analyzing the expression.

View File

@ -3,6 +3,8 @@
PR ada/15805
* gnat.dg/specs/access_constants.ads: New test.
* gnat.dg/specs/access_constant_decl.ads: New test.
2007-12-07 Olivier Hainque <hainque@adacore.com>
PR ada/34173

View File

@ -0,0 +1,11 @@
-- { dg-do compile }
package Access_Constant_Decl is
c: aliased constant integer := 3;
type const_ptr is access constant integer;
cp : const_ptr := c'access;
x : access integer := cp; -- { dg-error "access-to-constant" }
end Access_Constant_Decl;