diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ada/fe.h | 4 | ||||
-rw-r--r-- | gcc/ada/gcc-interface/decl.c | 9 |
3 files changed, 18 insertions, 1 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 62a6d5c..d73db7b 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -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. diff --git a/gcc/ada/fe.h b/gcc/ada/fe.h index e9c3721..6d31ae1 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 0d45392..58d6625 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); |