OSDN Git Service

2008-03-30 H.J. Lu <hongjiu.lu@intel.com>
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 30 Mar 2009 14:29:10 +0000 (14:29 +0000)
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 30 Mar 2009 14:29:10 +0000 (14:29 +0000)
PR target/38781
* config/i386/i386.c (classify_argument): Check total size of
structure.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@145292 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/i386.c

index 1215863..8ac2321 100644 (file)
@@ -1,3 +1,9 @@
+2008-03-30  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/38781
+       * config/i386/i386.c (classify_argument): Check total size of
+       structure.
+
 2009-03-30  Martin Jambor  <mjambor@suse.cz>
 
        * ipa-prop.h (jump_func_type): Rename IPA_UNKNOWN, IPA_CONST,
index 3dec02f..09a6597 100644 (file)
@@ -4942,6 +4942,8 @@ classify_argument (enum machine_mode mode, const_tree type,
                    }
                  else
                    {
+                     int pos;
+
                      type = TREE_TYPE (field);
 
                      /* Flexible array member is ignored.  */
@@ -4970,13 +4972,10 @@ classify_argument (enum machine_mode mode, const_tree type,
                                                + bit_offset) % 256);
                      if (!num)
                        return 0;
-                     for (i = 0; i < num; i++)
-                       {
-                         int pos =
-                           (int_bit_position (field) + (bit_offset % 64)) / 8 / 8;
-                         classes[i + pos] =
-                           merge_classes (subclasses[i], classes[i + pos]);
-                       }
+                     pos = (int_bit_position (field) + (bit_offset % 64)) / 8 / 8;
+                     for (i = 0; i < num && (i + pos) < words; i++)
+                       classes[i + pos] =
+                         merge_classes (subclasses[i], classes[i + pos]);
                    }
                }
            }