mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 05:20:25 +08:00
exp_ch6.adb (Is_Build_In_Place_Result_Type): Fix silly bug -- "Typ" should be "T".
2017-10-19 Bob Duff <duff@adacore.com> * exp_ch6.adb (Is_Build_In_Place_Result_Type): Fix silly bug -- "Typ" should be "T". Handle case of a subtype of a class-wide type. From-SVN: r253916
This commit is contained in:
parent
fb9dd1c7c3
commit
7d92172c18
@ -1,3 +1,8 @@
|
||||
2017-10-19 Bob Duff <duff@adacore.com>
|
||||
|
||||
* exp_ch6.adb (Is_Build_In_Place_Result_Type): Fix silly bug -- "Typ"
|
||||
should be "T". Handle case of a subtype of a class-wide type.
|
||||
|
||||
2017-10-19 Bob Duff <duff@adacore.com>
|
||||
|
||||
* exp_util.adb: (Process_Statements_For_Controlled_Objects): Clarify
|
||||
|
@ -7249,26 +7249,28 @@ package body Exp_Ch6 is
|
||||
begin
|
||||
-- For T'Class, return True if it's True for T. This is necessary
|
||||
-- because a class-wide function might say "return F (...)", where
|
||||
-- F returns the corresponding specific type.
|
||||
-- F returns the corresponding specific type. We need a loop in
|
||||
-- case T is a subtype of a class-wide type.
|
||||
|
||||
if Is_Class_Wide_Type (Typ) then
|
||||
T := Etype (Typ);
|
||||
end if;
|
||||
while Is_Class_Wide_Type (T) loop
|
||||
T := Etype (T);
|
||||
end loop;
|
||||
|
||||
-- If this is a generic formal type in an instance, return True if
|
||||
-- it's True for the generic actual type.
|
||||
|
||||
if Nkind (Parent (Typ)) = N_Subtype_Declaration
|
||||
and then Present (Generic_Parent_Type (Parent (Typ)))
|
||||
if Nkind (Parent (T)) = N_Subtype_Declaration
|
||||
and then Present (Generic_Parent_Type (Parent (T)))
|
||||
then
|
||||
T := Entity (Subtype_Indication (Parent (Typ)));
|
||||
T := Entity (Subtype_Indication (Parent (T)));
|
||||
|
||||
if Present (Full_View (T)) then
|
||||
T := Full_View (T);
|
||||
end if;
|
||||
end if;
|
||||
|
||||
elsif Present (Underlying_Type (Typ)) then
|
||||
T := Underlying_Type (Typ);
|
||||
if Present (Underlying_Type (T)) then
|
||||
T := Underlying_Type (T);
|
||||
end if;
|
||||
|
||||
declare
|
||||
|
Loading…
x
Reference in New Issue
Block a user