From: H.J. Lu Date: Mon, 30 Mar 2009 14:29:10 +0000 (+0000) Subject: re PR target/38781 (PR38151: valgrind finds problem) X-Git-Tag: releases/gcc-4.5.0~7029 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=680e8a004a9a664e55fde3239d7c7820290439ac;p=thirdparty%2Fgcc.git re PR target/38781 (PR38151: valgrind finds problem) 2008-03-30 H.J. Lu PR target/38781 * config/i386/i386.c (classify_argument): Check total size of structure. From-SVN: r145292 --- 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]); } } }