From 406028aff6dc6f5f06ba46234ff99e82de95f122 Mon Sep 17 00:00:00 2001 From: jakub Date: Thu, 10 Nov 2011 19:04:01 +0000 Subject: PR middle-end/51077 * tree-object-size.c (addr_object_size): Check TREE_CODE of MEM_REF's operand rather than code of the MEM_REF itself. * gcc.c-torture/compile/pr51077.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@181264 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.c-torture/compile/pr51077.c | 15 +++++++++++++++ gcc/tree-object-size.c | 2 +- 4 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr51077.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d9f944b5b0b..cca412504d3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-11-10 Jakub Jelinek + + PR middle-end/51077 + * tree-object-size.c (addr_object_size): Check TREE_CODE of + MEM_REF's operand rather than code of the MEM_REF itself. + 2011-11-07 Alan Modra PR target/30282 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3951c6633eb..dd7356c9704 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-11-10 Jakub Jelinek + + PR middle-end/51077 + * gcc.c-torture/compile/pr51077.c: New test. + 2011-11-07 Jason Merrill PR c++/50870 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr51077.c b/gcc/testsuite/gcc.c-torture/compile/pr51077.c new file mode 100644 index 00000000000..de2b97e58e9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr51077.c @@ -0,0 +1,15 @@ +/* PR middle-end/51077 */ + +struct S { unsigned char s, t[256]; }; + +void +foo (const struct S *x, struct S *y, int z) +{ + int i; + for (i = 0; i < 8; i++) + { + const struct S *a = &x[i]; + __builtin___memcpy_chk (y->t, a->t, z, __builtin_object_size (y->t, 0)); + y = (struct S *) &y->t[z]; + } +} diff --git a/gcc/tree-object-size.c b/gcc/tree-object-size.c index a236281e1c4..118f6d56ab5 100644 --- a/gcc/tree-object-size.c +++ b/gcc/tree-object-size.c @@ -175,7 +175,7 @@ addr_object_size (struct object_size_info *osi, const_tree ptr, unsigned HOST_WIDE_INT sz; if (!osi || (object_size_type & 1) != 0 - || TREE_CODE (pt_var) != SSA_NAME) + || TREE_CODE (TREE_OPERAND (pt_var, 0)) != SSA_NAME) { sz = compute_builtin_object_size (TREE_OPERAND (pt_var, 0), object_size_type & ~1); -- cgit v1.2.1