Index: gcc/dwarf2out.c
===================================================================
--- gcc/dwarf2out.c	(revision 162327)
+++ gcc/dwarf2out.c	(working copy)
@@ -15704,6 +15704,12 @@
       type_size_in_bits = double_int_type_size_in_bits (type);
       type_align_in_bits = simple_type_align_in_bits (type);
 
+      /* If the type is bigger than its alignment, the computation to round
+	 up object_offset_in_bits will in fact *reduce* the object offset.
+	 Catch this here by setting the alignment to the size.  */
+      if (((unsigned HOST_WIDE_INT) type_align_in_bits) < double_int_to_uhwi (type_size_in_bits))
+	type_align_in_bits = (unsigned int) double_int_to_uhwi (type_size_in_bits);
+
       field_size_tree = DECL_SIZE (decl);
 
       /* The size could be unspecified if there was an error, or for
