diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2014-01-20 16:31:59 +0100 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2014-01-20 16:31:59 +0100 |
commit | 818b578d1524f1aedf2c58ffe3b424023b2a79af (patch) | |
tree | 2eca1267973fc5219cffbc8fa2bb68b823f62b6c /gcc | |
parent | c2e5400135b1da2b3a6afdfcad95aedfdaf364a0 (diff) | |
download | gcc-818b578d1524f1aedf2c58ffe3b424023b2a79af.zip gcc-818b578d1524f1aedf2c58ffe3b424023b2a79af.tar.gz gcc-818b578d1524f1aedf2c58ffe3b424023b2a79af.tar.bz2 |
[multiple changes]
2014-01-20 Robert Dewar <dewar@adacore.com>
* gnat1drv.adb: Set Allow_Integer_Address in relaxed semantics mode.
* gnat_rm.texi: Document pragma Allow_Integer_Address.
* gnat_ugn.texi: Document pragma Allow_Integer_Address, -gnates.
* opt.ads: New flag Allow_Integer_Address.
* par-prag.adb: Dummy entry for pragma Allow_Integer_Address.
* sem_ch5.adb: Minor reformatting.
* sem_prag.adb: Implement pragma Allow_Integer_Address.
* sem_res.adb (Resolve): Allow integer address value if
switch set.
* sem_util.adb: Minor reformatting.
* snames.ads-tmpl: Add entry for pragma Allow_Integer_Address.
* switch-c.adb: Recognize flag -gnates.
* usage.adb: Document flag -gnates.
2014-01-20 Thomas Quinot <quinot@adacore.com>
* s-tadeca.adb: Fix minor typos in comment.
From-SVN: r206825
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 20 | ||||
-rw-r--r-- | gcc/ada/gnat1drv.adb | 1 | ||||
-rw-r--r-- | gcc/ada/gnat_rm.texi | 39 | ||||
-rw-r--r-- | gcc/ada/gnat_ugn.texi | 12 | ||||
-rw-r--r-- | gcc/ada/opt.ads | 7 | ||||
-rw-r--r-- | gcc/ada/par-prag.adb | 1 | ||||
-rw-r--r-- | gcc/ada/s-tadeca.adb | 2 | ||||
-rw-r--r-- | gcc/ada/sem_ch5.adb | 4 | ||||
-rw-r--r-- | gcc/ada/sem_prag.adb | 12 | ||||
-rw-r--r-- | gcc/ada/sem_res.adb | 29 | ||||
-rw-r--r-- | gcc/ada/sem_util.adb | 2 | ||||
-rw-r--r-- | gcc/ada/snames.ads-tmpl | 2 | ||||
-rw-r--r-- | gcc/ada/switch-c.adb | 9 | ||||
-rw-r--r-- | gcc/ada/usage.adb | 5 |
14 files changed, 139 insertions, 6 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 41edf88..9cba1cd 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,23 @@ +2014-01-20 Robert Dewar <dewar@adacore.com> + + * gnat1drv.adb: Set Allow_Integer_Address in relaxed semantics mode. + * gnat_rm.texi: Document pragma Allow_Integer_Address. + * gnat_ugn.texi: Document pragma Allow_Integer_Address, -gnates. + * opt.ads: New flag Allow_Integer_Address. + * par-prag.adb: Dummy entry for pragma Allow_Integer_Address. + * sem_ch5.adb: Minor reformatting. + * sem_prag.adb: Implement pragma Allow_Integer_Address. + * sem_res.adb (Resolve): Allow integer address value if + switch set. + * sem_util.adb: Minor reformatting. + * snames.ads-tmpl: Add entry for pragma Allow_Integer_Address. + * switch-c.adb: Recognize flag -gnates. + * usage.adb: Document flag -gnates. + +2014-01-20 Thomas Quinot <quinot@adacore.com> + + * s-tadeca.adb: Fix minor typos in comment. + 2014-01-20 Pascal Obry <obry@adacore.com> * s-win32.ads (FreeLibrary): New import. diff --git a/gcc/ada/gnat1drv.adb b/gcc/ada/gnat1drv.adb index 19df9fd..bc1de74 100644 --- a/gcc/ada/gnat1drv.adb +++ b/gcc/ada/gnat1drv.adb @@ -293,6 +293,7 @@ procedure Gnat1drv is -- semantics mode. if Relaxed_RM_Semantics then + Opt.Allow_Integer_Address := True; Overriding_Renamings := True; Treat_Categorization_Errors_As_Warnings := True; end if; diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi index 465da2b..1d2a567 100644 --- a/gcc/ada/gnat_rm.texi +++ b/gcc/ada/gnat_rm.texi @@ -104,6 +104,7 @@ Implementation Defined Pragmas * Pragma Ada_2005:: * Pragma Ada_12:: * Pragma Ada_2012:: +* Pragma Allow_Integer_Address:: * Pragma Annotate:: * Pragma Assert:: * Pragma Assert_And_Cut:: @@ -276,6 +277,7 @@ Implementation Defined Aspects * Aspect Abstract_State:: * Aspect Ada_2005:: * Aspect Ada_2012:: +* Pragma Allow_Integer_Address:: * Aspect Compiler_Unit:: * Aspect Contract_Cases:: * Aspect Depends:: @@ -927,6 +929,7 @@ consideration, the use of these pragmas should be minimized. * Pragma Ada_2005:: * Pragma Ada_12:: * Pragma Ada_2012:: +* Pragma Allow_Integer_Address:: * Pragma Annotate:: * Pragma Assert:: * Pragma Assert_And_Cut:: @@ -1218,6 +1221,42 @@ pragma Ada_2012; This configuration pragma is a synonym for pragma Ada_12 and has the same syntax and effect. +@node Pragma Allow_Integer_Address +@unnumberedsec Pragma Allow_Integer_Address +@findex Allow_Integer_Address +@noindent +Syntax: +@smallexample @c ada +pragma Allow_Integer_Address; +@end smallexample + +@noindent +In most versions of GNAT, @code{System.Address} is a private type, which means +that integer values are not allowed. If the configuration pragma +@code{Allow_Integer_Address} is given, then integer expressions may +be used anywhere a value of type @code{System.Address} is required. +The effect is to introduce an implicit unchecked conversion from the +integer value to type @code{System.Address}. The following example +compiles without errors: + +@smallexample @c ada +pragma Allow_Integer_Address; +with System; use System; +package AddrAsInt is + X : Integer; + Y : Integer; + for X'Address use 16#1240#; + for Y use at 16#3230#; + m : Address := 16#4000#; + n : constant Address := 4000; + p : constant Address := Address (X + Y); + type R is new integer; + RR : R := 1000; + Z : Integer; + for Z'Address use RR; +end AddrAsInt; +@end smallexample + @node Pragma Annotate @unnumberedsec Pragma Annotate @findex Annotate diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index 32a7e0f..42b8588 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -3821,9 +3821,16 @@ these errors become warnings (which can be ignored, or suppressed in the usual manner). This can be useful in some specialized circumstances such as the temporary use of special test software. +@ifclear vms +@item -gnates +@cindex @option{-gnates} (@command{gcc}) +Activates @code{Allow_Integer_Address} mode as though the corresponding +configuration pragma was present. +@end ifclear + @item -gnateS @cindex @option{-gnateS} (@command{gcc}) -Synonym of @option{-fdump-scos}, kept for backards compatibility. +Synonym of @option{-fdump-scos}, kept for backwards compatibility. @item -gnatet=@var{path} @cindex @option{-gnatet=file} (@command{gcc}) @@ -11778,6 +11785,7 @@ recognized by GNAT: Ada_2005 Ada_12 Ada_2012 + Allow_Integer_Address Annotate Assertion_Policy Assume_No_Invalid_Values @@ -22818,6 +22826,8 @@ following: @item @code{Ada_2012} +@item @code{ALLOW_INTEGER_ADDRESS} + @item @code{ANNOTATE} @item @code{ASSERT} diff --git a/gcc/ada/opt.ads b/gcc/ada/opt.ads index ba48680..1641d87 100644 --- a/gcc/ada/opt.ads +++ b/gcc/ada/opt.ads @@ -188,6 +188,13 @@ package Opt is -- also repeated error messages for references to undefined identifiers -- and certain other repeated error messages. Set by use of -gnatf. + Allow_Integer_Address : Boolean := False; + -- GNAT + -- Allow use of integer expression in a context requiring System.Address. + -- Set by the use of configuration pragma Allow_Integer_Address, or the + -- compiler switch -gnates. Also set in relaxed semantics mode for use + -- by CodePeer. + All_Sources : Boolean := False; -- GNATBIND -- Set to True to require all source files to be present. This flag is diff --git a/gcc/ada/par-prag.adb b/gcc/ada/par-prag.adb index 4cb9fd1..8e86743 100644 --- a/gcc/ada/par-prag.adb +++ b/gcc/ada/par-prag.adb @@ -1114,6 +1114,7 @@ begin Pragma_Assume_No_Invalid_Values | Pragma_AST_Entry | Pragma_All_Calls_Remote | + Pragma_Allow_Integer_Address | Pragma_Annotate | Pragma_Assert | Pragma_Assert_And_Cut | diff --git a/gcc/ada/s-tadeca.adb b/gcc/ada/s-tadeca.adb index 99fbe14..6faf4d0 100644 --- a/gcc/ada/s-tadeca.adb +++ b/gcc/ada/s-tadeca.adb @@ -55,7 +55,7 @@ begin end if; -- T is expressed as a duration elapsed since the UNIX epoch, whereas - -- Time_Enque expects duraction elapsed since the epoch of the Ada real- + -- Time_Enqueue expects duration elapsed since the epoch of the Ada real- -- time clock: compensate if necessary. -- Comparison "SOSC.CLOCK_RT_Ada = SOSC.CLOCK_REALTIME" is compile diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb index 3b0d136..788ff89 100644 --- a/gcc/ada/sem_ch5.adb +++ b/gcc/ada/sem_ch5.adb @@ -1695,8 +1695,8 @@ package body Sem_Ch5 is Set_Ekind (Def_Id, E_Variable); - -- Provide a link between the iterator variable and the container, - -- for subequent use in cross-reference and modification information. + -- Provide a link between the iterator variable and the container, for + -- subsequent use in cross-reference and modification information. if Of_Present (N) then Set_Related_Expression (Def_Id, Iter_Name); diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index e678c8b..ef2c809 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -9825,6 +9825,17 @@ package body Sem_Prag is end if; end All_Calls_Remote; + --------------------------- + -- Allow_Integer_Address -- + --------------------------- + + -- pragma Allow_Integer_Address; + + when Pragma_Allow_Integer_Address => + GNAT_Pragma; + Check_Arg_Count (0); + Opt.Allow_Integer_Address := True; + -------------- -- Annotate -- -------------- @@ -22874,6 +22885,7 @@ package body Sem_Prag is Pragma_Ada_12 => -1, Pragma_Ada_2012 => -1, Pragma_All_Calls_Remote => -1, + Pragma_Allow_Integer_Address => 0, Pragma_Annotate => -1, Pragma_Assert => -1, Pragma_Assert_And_Cut => -1, diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index 07a3c4a..0dc75aa 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -2615,7 +2615,21 @@ package body Sem_Res is -- If an error message was issued already, Found got reset to -- True, so if it is still False, issue standard Wrong_Type msg. - if not Found then + -- First check for special case of Address wanted, integer found + -- with the configuration pragma Allow_Integer_Address active. + + if Allow_Integer_Address + and then Is_RTE (Typ, RE_Address) + and then Is_Integer_Type (Etype (N)) + then + Rewrite + (N, Unchecked_Convert_To (RTE (RE_Address), + Relocate_Node (N))); + return; + + -- OK, not the special case go ahead and issue message + + elsif not Found then if Is_Overloaded (N) and then Nkind (N) = N_Function_Call then @@ -11622,6 +11636,19 @@ package body Sem_Res is ("add ALL to }!", N, Target_Type); return False; + -- Deal with conversion of integer type to address if the pragma + -- Allow_Integer_Address is in effect. + + elsif Allow_Integer_Address + and then Is_RTE (Etype (N), RE_Address) + and then Is_Integer_Type (Etype (Operand)) + then + Rewrite (N, + Unchecked_Convert_To (RTE (RE_Address), Relocate_Node (N))); + return True; + + -- Here we have a real conversion error + else Conversion_Error_NE ("invalid conversion, not compatible with }", N, Opnd_Type); diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index e9722a3..905eabb 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -13081,7 +13081,7 @@ package body Sem_Util is if Present (Related_Expression (Ent)) and then Nkind (Parent (Related_Expression (Ent))) = - N_Iterator_Specification + N_Iterator_Specification then Exp := Original_Node (Related_Expression (Ent)); end if; diff --git a/gcc/ada/snames.ads-tmpl b/gcc/ada/snames.ads-tmpl index 0be4958..576d89e 100644 --- a/gcc/ada/snames.ads-tmpl +++ b/gcc/ada/snames.ads-tmpl @@ -361,6 +361,7 @@ package Snames is Name_Ada_2005 : constant Name_Id := N + $; -- GNAT Name_Ada_12 : constant Name_Id := N + $; -- GNAT Name_Ada_2012 : constant Name_Id := N + $; -- GNAT + Name_Allow_Integer_Address : constant Name_Id := N + $; -- GNAT Name_Annotate : constant Name_Id := N + $; -- GNAT Name_Assertion_Policy : constant Name_Id := N + $; -- Ada 05 Name_Assume : constant Name_Id := N + $; -- GNAT @@ -1709,6 +1710,7 @@ package Snames is Pragma_Ada_2005, Pragma_Ada_12, Pragma_Ada_2012, + Pragma_Allow_Integer_Address, Pragma_Annotate, Pragma_Assertion_Policy, Pragma_Assume, diff --git a/gcc/ada/switch-c.adb b/gcc/ada/switch-c.adb index 0d80f44..369d0a6 100644 --- a/gcc/ada/switch-c.adb +++ b/gcc/ada/switch-c.adb @@ -660,6 +660,15 @@ package body Switch.C is when 'P' => Treat_Categorization_Errors_As_Warnings := True; + -- -gnates (allow integer expression for System.Address) + + -- Note: there is no VMS equivalent for this switch, since + -- in VMS, System.Address is an integer type in any case. + + when 's' => + Allow_Integer_Address := True; + Ptr := Ptr + 1; + -- -gnateS (generate SCO information) -- Include Source Coverage Obligation information in ALI diff --git a/gcc/ada/usage.adb b/gcc/ada/usage.adb index 3f566f4..f7be313 100644 --- a/gcc/ada/usage.adb +++ b/gcc/ada/usage.adb @@ -236,6 +236,11 @@ begin Write_Switch_Char ("eP"); Write_Line ("Pure/Prelaborate errors generate warnings rather than errors"); + -- Line fofr -gnates switch + + Write_Switch_Char ("es"); + Write_Line ("Allow integer expression for System.Address value"); + -- Line for -gnateS switch Write_Switch_Char ("eS"); |