From abb3ea16fa70565acae570e7410eb6702cf631ed Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Tue, 11 Oct 2016 10:11:49 +0000 Subject: [PATCH] fe.h (Constant_Value): Declare. * 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 | 6 ++++++ gcc/ada/fe.h | 4 +++- gcc/ada/gcc-interface/decl.c | 9 +++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 62a6d5ca589..d73db7bec6e 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2016-10-11 Tristan Gingold + + * fe.h (Constant_Value): Declare. + * gcc-interface/decl.c (compile_time_known_address_p): Also consider + references to constants. + 2016-10-11 Eric Botcazou * gcc-interface/trans.c (gnat_to_gnu) : Adjust comment. diff --git a/gcc/ada/fe.h b/gcc/ada/fe.h index e9c37217e95..6d31ae1a565 100644 --- a/gcc/ada/fe.h +++ b/gcc/ada/fe.h @@ -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); diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c index 0d45392a0b3..58d6625dcaa 100644 --- a/gcc/ada/gcc-interface/decl.c +++ b/gcc/ada/gcc-interface/decl.c @@ -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); -- 2.30.2