diff options
author | Samuel Tardieu <sam@rfc1149.net> | 2007-12-07 14:37:36 +0000 |
---|---|---|
committer | Samuel Tardieu <sam@gcc.gnu.org> | 2007-12-07 14:37:36 +0000 |
commit | 9cc11b58d2dc8c70a7892d0da5836e066219ea6d (patch) | |
tree | a36f694cec9ce46a29cc1dc0435422f8a015f6fe | |
parent | 2eb160f205ce2a807ecdef95b2e88652a5e3f0ed (diff) | |
download | gcc-9cc11b58d2dc8c70a7892d0da5836e066219ea6d.zip gcc-9cc11b58d2dc8c70a7892d0da5836e066219ea6d.tar.gz gcc-9cc11b58d2dc8c70a7892d0da5836e066219ea6d.tar.bz2 |
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
-rw-r--r-- | gcc/ada/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/ada/sem_ch3.adb | 14 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/specs/access_constant_decl.ads | 11 |
4 files changed, 31 insertions, 0 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 9ddc6da..cd4e3a0 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -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 diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index 5c61d00..c16b406 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -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. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2342e5e..2dcabc1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 diff --git a/gcc/testsuite/gnat.dg/specs/access_constant_decl.ads b/gcc/testsuite/gnat.dg/specs/access_constant_decl.ads new file mode 100644 index 0000000..aec40e6 --- /dev/null +++ b/gcc/testsuite/gnat.dg/specs/access_constant_decl.ads @@ -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; |