aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@gcc.gnu.org>2008-05-12 20:34:31 +0000
committerSamuel Tardieu <sam@gcc.gnu.org>2008-05-12 20:34:31 +0000
commitea0a7f390a26152d2a7986e78fdf476cabc6630e (patch)
treebca3e051348964537c82c2b16cc149370071262d /gcc/ada
parentfcc9fe1e6a3ce2e0af318fc3988456673dfa0239 (diff)
downloadgcc-ea0a7f390a26152d2a7986e78fdf476cabc6630e.zip
gcc-ea0a7f390a26152d2a7986e78fdf476cabc6630e.tar.gz
gcc-ea0a7f390a26152d2a7986e78fdf476cabc6630e.tar.bz2
sem_ch3.adb (Build_Derived_Record_Type): Accept statically matching constraint expressions.
gcc/ada/ * sem_ch3.adb (Build_Derived_Record_Type): Accept statically matching constraint expressions. gcc/testsuite/ * gnat.dg/specs/statically_matching.ads: New. From-SVN: r135230
Diffstat (limited to 'gcc/ada')
-rw-r--r--gcc/ada/ChangeLog22
-rw-r--r--gcc/ada/sem_ch3.adb17
2 files changed, 27 insertions, 12 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 6431d93..5330ee5 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,13 +1,19 @@
+2008-05-12 Samuel Tardieu <sam@rfc1149.net>
+ Ed Schonberg <schonberg@adacore.com>
+
+ * sem_ch3.adb (Build_Derived_Record_Type): Accept statically matching
+ constraint expressions.
+
2008-05-12 Tomas Bily <tbily@suse.cz>
- * utils2.c (known_alignment, contains_save_expr_p)
- (gnat_mark_addressable): Use CASE_CONVERT.
- * decl.c (annotate_value): Likewise.
- * trans.c (maybe_stabilize_reference): Likewise.
- * utils2.c (build_binary_op): Use CONVERT_EXPR_P.
- * utils.c (rest_of_record_type_compilation): Likewise.
- * trans.c (protect_multiple_eval, Attribute_to_gnu)
- (protect_multiple_eval): Likewise.
+ * utils2.c (known_alignment, contains_save_expr_p)
+ (gnat_mark_addressable): Use CASE_CONVERT.
+ * decl.c (annotate_value): Likewise.
+ * trans.c (maybe_stabilize_reference): Likewise.
+ * utils2.c (build_binary_op): Use CONVERT_EXPR_P.
+ * utils.c (rest_of_record_type_compilation): Likewise.
+ * trans.c (protect_multiple_eval, Attribute_to_gnu)
+ (protect_multiple_eval): Likewise.
2008-05-08 Andreas Schwab <schwab@suse.de>
diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb
index d050d1b..dd08710 100644
--- a/gcc/ada/sem_ch3.adb
+++ b/gcc/ada/sem_ch3.adb
@@ -6268,8 +6268,8 @@ package body Sem_Ch3 is
and then Has_Private_Declaration (Derived_Type)
and then Present (Discriminant_Constraint (Derived_Type))
then
- -- Verify that constraints of the full view conform to those
- -- given in partial view.
+ -- Verify that constraints of the full view statically match
+ -- those given in the partial view.
declare
C1, C2 : Elmt_Id;
@@ -6278,9 +6278,18 @@ package body Sem_Ch3 is
C1 := First_Elmt (New_Discrs);
C2 := First_Elmt (Discriminant_Constraint (Derived_Type));
while Present (C1) and then Present (C2) loop
- if not
- Fully_Conformant_Expressions (Node (C1), Node (C2))
+
+ if Fully_Conformant_Expressions (Node (C1), Node (C2))
+ or else
+ (Is_OK_Static_Expression (Node (C1))
+ and then
+ Is_OK_Static_Expression (Node (C2))
+ and then
+ Expr_Value (Node (C1)) = Expr_Value (Node (C2)))
then
+ null;
+
+ else
Error_Msg_N (
"constraint not conformant to previous declaration",
Node (C1));