This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Ada] Incorrect result of equality on multidimensional packed arrays


This patch corrects an oversight in the computation of size of multidimensional
packed arrays.  Previously to this patch only the first dimension was used
to determine the number of storage units to compare.

Executing

   gnatmake -q equality.adb
   equality

must yield

   Success - comparison claims these are different

---
with ADA.TEXT_IO;

procedure EQUALITY is

   type FLAG_TYPE is (RED, GREEN);
   for FLAG_TYPE'size use 1;
   
   type TWO_DIM_ARRAY_TYPE is array 
       (INTEGER range 1 .. 16, INTEGER range 1 .. 16) of FLAG_TYPE;
   pragma PACK(TWO_DIM_ARRAY_TYPE);
   
   ARR_1 : TWO_DIM_ARRAY_TYPE := (others => (others => RED));
   ARR_2 : TWO_DIM_ARRAY_TYPE := (others => (others => RED));
    
begin

   ARR_2(2,1) := GREEN;    -- Make the two arrays different.

   if ARR_1 /= ARR_2
   then
      ADA.TEXT_IO.PUT_LINE("Success - comparison claims these are different");
   else
      ADA.TEXT_IO.PUT_LINE("Failure - comparison claims these are identical"); 
   end if;

end EQUALITY;

Tested on x86_64-pc-linux-gnu, committed on trunk

2016-04-21  Ed Schonberg  <schonberg@adacore.com>

	* exp_pakd.adb (Compute_Number_Components): New function to
	build an expression that computes the number of a components of
	an array that may be multidimensional.
	(Expan_Packed_Eq): Use it.

Attachment: difs
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]