From: Hristian Kirtchev Date: Thu, 31 Jul 2008 10:27:04 +0000 (+0200) Subject: exp_attr.adb (Find_Stream_Subprogram): Check the base type instead of the type when... X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b2c6b35f24ba203e027caa8e5206810d3d6ae265;p=platform%2Fupstream%2Fgcc.git exp_attr.adb (Find_Stream_Subprogram): Check the base type instead of the type when... 2008-07-31 Hristian Kirtchev * exp_attr.adb (Find_Stream_Subprogram): Check the base type instead of the type when looking for stream subprograms for type String, Wide_String and Wide_Wide_String. * s-ststop.adb: Change the initialization expression of constant Use_Block_IO. From-SVN: r138383 --- diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb index 1637863..006b8f8 100644 --- a/gcc/ada/exp_attr.adb +++ b/gcc/ada/exp_attr.adb @@ -5314,7 +5314,8 @@ package body Exp_Attr is (Typ : Entity_Id; Nam : TSS_Name_Type) return Entity_Id is - Ent : constant Entity_Id := TSS (Typ, Nam); + Base_Typ : constant Entity_Id := Base_Type (Typ); + Ent : constant Entity_Id := TSS (Typ, Nam); begin if Present (Ent) then @@ -5340,7 +5341,7 @@ package body Exp_Attr is -- String as defined in package Ada - if Typ = Standard_String then + if Base_Typ = Standard_String then if Nam = TSS_Stream_Input then return RTE (RE_String_Input); @@ -5356,7 +5357,7 @@ package body Exp_Attr is -- Wide_String as defined in package Ada - elsif Typ = Standard_Wide_String then + elsif Base_Typ = Standard_Wide_String then if Nam = TSS_Stream_Input then return RTE (RE_Wide_String_Input); @@ -5372,7 +5373,7 @@ package body Exp_Attr is -- Wide_Wide_String as defined in package Ada - elsif Typ = Standard_Wide_Wide_String then + elsif Base_Typ = Standard_Wide_Wide_String then if Nam = TSS_Stream_Input then return RTE (RE_Wide_Wide_String_Input); diff --git a/gcc/ada/s-ststop.adb b/gcc/ada/s-ststop.adb index 8d18108..88e29f0 100644 --- a/gcc/ada/s-ststop.adb +++ b/gcc/ada/s-ststop.adb @@ -92,17 +92,12 @@ package body System.Strings.Stream_Ops is subtype String_Block is String_Type (1 .. C_In_Default_Block); - -- Block IO is used in the following two scenarios: - - -- 1) When the size of the character type equals that of the stream - -- element type, regardless of endianness. - - -- 2) When using the standard stream IO routines for elementary - -- types which guarantees the same endianness over partitions. + -- Block IO is used when the low level can support block IO and the size + -- of the character type is a multiple of the stream element type. Use_Block_IO : constant Boolean := - C_Size = SE_Size - or else Stream_Attributes.Block_IO_OK; + Stream_Attributes.Block_IO_OK + and then C_Size mod SE_Size = 0; -- Conversions to and from Default_Block