fe.h (Constant_Value): Declare.
authorTristan Gingold <gingold@adacore.com>
Tue, 11 Oct 2016 10:11:49 +0000 (10:11 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Tue, 11 Oct 2016 10:11:49 +0000 (10:11 +0000)
* fe.h (Constant_Value): Declare.
* gcc-interface/decl.c (compile_time_known_address_p): Also consider
references to constants.

From-SVN: r240977

gcc/ada/ChangeLog
gcc/ada/fe.h
gcc/ada/gcc-interface/decl.c

index 62a6d5ca589f23bed63c5a076b797008a945e17b..d73db7bec6e5ea9ad120019f9f0861e6cd09d1ed 100644 (file)
@@ -1,3 +1,9 @@
+2016-10-11  Tristan Gingold  <gingold@adacore.com>
+
+       * fe.h (Constant_Value): Declare.
+       * gcc-interface/decl.c (compile_time_known_address_p): Also consider
+       references to constants.
+
 2016-10-11  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc-interface/trans.c (gnat_to_gnu) <N_Op_Add>: Adjust comment.
index e9c37217e95624b39df3f560425dcd13aebaae50..6d31ae1a5654171c79c8d9b349d28594c63012c5 100644 (file)
@@ -6,7 +6,7 @@
  *                                                                          *
  *                              C Header File                               *
  *                                                                          *
- *          Copyright (C) 1992-2015, Free Software Foundation, Inc.         *
+ *          Copyright (C) 1992-2016, Free Software Foundation, Inc.         *
  *                                                                          *
  * GNAT is free software;  you can  redistribute it  and/or modify it under *
  * terms of the  GNU General Public License as published  by the Free Soft- *
@@ -226,6 +226,7 @@ extern Boolean Is_Others_Aggregate (Node_Id);
 /* sem_aux:  */
 
 #define Ancestor_Subtype               sem_aux__ancestor_subtype
+#define Constant_Value                 sem_aux__constant_value
 #define First_Discriminant             sem_aux__first_discriminant
 #define First_Stored_Discriminant      sem_aux__first_stored_discriminant
 #define First_Subtype                  sem_aux__first_subtype
@@ -233,6 +234,7 @@ extern Boolean Is_Others_Aggregate (Node_Id);
 #define Is_Derived_Type                sem_aux__is_derived_type
 
 extern Entity_Id  Ancestor_Subtype             (Entity_Id);
+extern Node_Id    Constant_Value               (Entity_Id);
 extern Entity_Id  First_Discriminant           (Entity_Id);
 extern Entity_Id  First_Stored_Discriminant    (Entity_Id);
 extern Entity_Id  First_Subtype                (Entity_Id);
index 0d45392a0b37d710b84d3f427438840f12e7ec1a..58d6625dcaa2f649c79a75370cb33db895c0a84c 100644 (file)
@@ -6333,6 +6333,15 @@ array_type_has_nonaliased_component (tree gnu_type, Entity_Id gnat_type)
 static bool
 compile_time_known_address_p (Node_Id gnat_address)
 {
+  /* Handle reference to a constant.  */
+  if (Is_Entity_Name (gnat_address)
+      && Ekind (Entity (gnat_address)) == E_Constant)
+    {
+      gnat_address = Constant_Value (Entity (gnat_address));
+      if (No (gnat_address))
+       return false;
+    }
+
   /* Catch System'To_Address.  */
   if (Nkind (gnat_address) == N_Unchecked_Type_Conversion)
     gnat_address = Expression (gnat_address);