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]

PR target/24969


Hi,
the problem is caused by classify_argument improperly computing offsets of
bitfields and as a result classifying the other half of structure as passed
nowhere.

Bootstrapped/regtested x86_64-linux. 
I will commit it to 3.4/4.0/4.1/mainline if there will be no complains till
monday evening.
Honza

2005-12-02  Jan Hubicka  <jh@suse.cz>
	PR target/24969
	* i386.c (classify_argument): Properly adjust offset of bitfield for
	substructures.
Index: config/i386/i386.c
===================================================================
*** config/i386/i386.c	(revision 107909)
--- config/i386/i386.c	(working copy)
*************** classify_argument (enum machine_mode mod
*** 2652,2659 ****
  		     misaligned integers.  */
  		  if (DECL_BIT_FIELD (field))
  		    {
! 		      for (i = int_bit_position (field) / 8 / 8;
! 			   i < (int_bit_position (field)
  			        + tree_low_cst (DECL_SIZE (field), 0)
  				+ 63) / 8 / 8; i++)
  			classes[i] =
--- 2652,2659 ----
  		     misaligned integers.  */
  		  if (DECL_BIT_FIELD (field))
  		    {
! 		      for (i = (int_bit_position (field) + (bit_offset % 64)) / 8 / 8;
! 			   i < ((int_bit_position (field) + (bit_offset % 64))
  			        + tree_low_cst (DECL_SIZE (field), 0)
  				+ 63) / 8 / 8; i++)
  			classes[i] =


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