From: hjl Date: Mon, 30 Mar 2009 14:29:10 +0000 (+0000) Subject: 2008-03-30 H.J. Lu X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=076a4c5c0ef79fbe6ce97bb96968cdf44b03f30c;p=thirdparty%2Fgcc.git 2008-03-30 H.J. Lu 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1215863c452b..8ac232141a95 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-03-30 H.J. Lu + + PR target/38781 + * config/i386/i386.c (classify_argument): Check total size of + structure. + 2009-03-30 Martin Jambor * ipa-prop.h (jump_func_type): Rename IPA_UNKNOWN, IPA_CONST, diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 3dec02f3acd7..09a6597b8945 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -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]); } } }