summaryrefslogtreecommitdiff
path: root/gcc/ada/sem_ch5.adb
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2010-06-22 13:53:46 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2010-06-22 13:53:46 +0000
commite4563f0dfa7f1b26309630ed0b91ea96cc256755 (patch)
tree0c285ad5daaa531e4663b4c3851f4a91cf472cab /gcc/ada/sem_ch5.adb
parent7be3ddddb3a4b83439bf643e06377ef59565f6ee (diff)
downloadgcc-e4563f0dfa7f1b26309630ed0b91ea96cc256755.tar.gz
2010-06-22 Gary Dismukes <dismukes@adacore.com>
* sem_ch5.adb (Analyze_Assignment): Revise test for illegal assignment to abstract targets to check that the type is tagged and comes from source, rather than only testing for targets of interface types. Remove premature return. 2010-06-22 Vincent Celier <celier@adacore.com> * vms_data.ads: Modify the declarations of qualifiers /UNCHECKED_SHARED_LIB_IMPORTS to allow the generation of gnat.hlp without error. 2010-06-22 Ed Schonberg <schonberg@adacore.com> * exp_ch6.adb (Is_Build_In_Place_Function): Predicate is false if expansion is disabled. 2010-06-22 Robert Dewar <dewar@adacore.com> * makeusg.adb: Minor reformatting. 2010-06-22 Robert Dewar <dewar@adacore.com> * types.ads: (Dint): Removed, no longer used anywhere. * uintp.adb (UI_From_CC): Use UI_From_Int, range is sufficient. (UI_Mul): Avoid use of UI_From_Dint. (UI_From_Dint): Removed, not used. * uintp.ads (UI_From_Dint): Removed, not used. (Uint_Min/Max_Simple_Mul): New constants. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161187 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/sem_ch5.adb')
-rw-r--r--gcc/ada/sem_ch5.adb12
1 files changed, 6 insertions, 6 deletions
diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb
index 22897a35e2b..bd34a6ea250 100644
--- a/gcc/ada/sem_ch5.adb
+++ b/gcc/ada/sem_ch5.adb
@@ -448,14 +448,14 @@ package body Sem_Ch5 is
end if;
return;
- -- Enforce RM 3.9.3 (8): left-hand side cannot be abstract
+ -- Enforce RM 3.9.3 (8): the target of an assignment operation cannot be
+ -- abstract. This is only checked when the assignment Comes_From_Source,
+ -- because in some cases the expander generates such assignments (such
+ -- in the _assign operation for an abstract type).
- elsif Is_Interface (T1)
- and then not Is_Class_Wide_Type (T1)
- then
+ elsif Is_Abstract_Type (T1) and then Comes_From_Source (N) then
Error_Msg_N
- ("target of assignment operation may not be abstract", Lhs);
- return;
+ ("target of assignment operation must not be abstract", Lhs);
end if;
-- Resolution may have updated the subtype, in case the left-hand