This patch fixes a bug where if an address clause specifies a call to
System'To_Address as the address, and the code is compiled with the
-gnatc switch, the compiler gives a spurious error message.

The following test should compile quietly with -gnatc:

gcc -c -gnatc counter.ads

with System;

package Counter is
   type Bar is
      record
         X : Integer;
         Y : Integer;
      end record;

   Null_Bar : constant Bar := (0, 0);

   Address : constant := 16#D000_0000#;

   Foo : Bar := Null_Bar;
   for Foo'Address use System'To_Address (Address);
end Counter;

Tested on x86_64-pc-linux-gnu, committed on trunk

2017-11-16  Bob Duff  <d...@adacore.com>

        * sem_ch13.adb (Check_Expr_Constants): Avoid error message in case of
        System'To_Address.

Index: sem_ch13.adb
===================================================================
--- sem_ch13.adb        (revision 254797)
+++ sem_ch13.adb        (working copy)
@@ -9783,6 +9783,15 @@
                then
                   Check_At_Constant_Address (Prefix (Nod));
 
+               --  Normally, System'To_Address will have been transformed into
+               --  an Unchecked_Conversion, but in -gnatc mode, it will not,
+               --  and we don't want to give an error, because the whole point
+               --  of 'To_Address is that it is static.
+
+               elsif Attribute_Name (Nod) = Name_To_Address then
+                  pragma Assert (Operating_Mode = Check_Semantics);
+                  null;
+
                else
                   Check_Expr_Constants (Prefix (Nod));
                   Check_List_Constants (Expressions (Nod));

Reply via email to