diff options
author | Samuel Tardieu <sam@gcc.gnu.org> | 2008-05-12 20:34:31 +0000 |
---|---|---|
committer | Samuel Tardieu <sam@gcc.gnu.org> | 2008-05-12 20:34:31 +0000 |
commit | ea0a7f390a26152d2a7986e78fdf476cabc6630e (patch) | |
tree | bca3e051348964537c82c2b16cc149370071262d /gcc/ada | |
parent | fcc9fe1e6a3ce2e0af318fc3988456673dfa0239 (diff) | |
download | gcc-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/ChangeLog | 22 | ||||
-rw-r--r-- | gcc/ada/sem_ch3.adb | 17 |
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)); |