aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2009-03-30 14:29:10 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2009-03-30 07:29:10 -0700
commit680e8a004a9a664e55fde3239d7c7820290439ac (patch)
treebb7dc43f1552a80996378dc47189d317330a16c1
parent133f9369c382006e841e9b940e060cbb4911edcf (diff)
downloadgcc-680e8a004a9a664e55fde3239d7c7820290439ac.zip
gcc-680e8a004a9a664e55fde3239d7c7820290439ac.tar.gz
gcc-680e8a004a9a664e55fde3239d7c7820290439ac.tar.bz2
re PR target/38781 (PR38151: valgrind finds problem)
2008-03-30 H.J. Lu <hongjiu.lu@intel.com> PR target/38781 * config/i386/i386.c (classify_argument): Check total size of structure. From-SVN: r145292
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/i386/i386.c13
2 files changed, 12 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1215863..8ac2321 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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,
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 3dec02f..09a6597 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]);
}
}
}