aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2009-06-15 20:48:00 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2009-06-15 20:48:00 +0200
commit98a129b9c42c43d4cc0a256963482df85bb43284 (patch)
treec2567d96144f56a506baa00e1f8b8846efc146f9 /gcc
parent081b044b4964ad853f8eb7d6eefd7eb14d397844 (diff)
downloadgcc-98a129b9c42c43d4cc0a256963482df85bb43284.zip
gcc-98a129b9c42c43d4cc0a256963482df85bb43284.tar.gz
gcc-98a129b9c42c43d4cc0a256963482df85bb43284.tar.bz2
tree-object-size.c (addr_object_size): Fix a pasto in the last change.
* tree-object-size.c (addr_object_size): Fix a pasto in the last change. * gcc.dg/builtin-object-size-7.c: New test. From-SVN: r148503
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/builtin-object-size-7.c71
-rw-r--r--gcc/tree-object-size.c2
4 files changed, 81 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 42f7441..47e4e6c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2009-06-15 Jakub Jelinek <jakub@redhat.com>
+
+ * tree-object-size.c (addr_object_size): Fix a pasto in the last
+ change.
+
2009-06-15 Rafael Avila de Espindola <espindola@google.com>
* cgraph.c (cgraph_make_node_local): Use DECL_COMDAT_GROUP.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a409a2e..b1587fe 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2009-06-15 Jakub Jelinek <jakub@redhat.com>
+ * gcc.dg/builtin-object-size-7.c: New test.
+
+2009-06-15 Jakub Jelinek <jakub@redhat.com>
+
PR testsuite/40426
* lib/gcc-dg.exp (gcc-dg-debug-runtest): For type -gdwarf-2 and
level != "" use separate -gdwarf-2 -g${level} options instead of
diff --git a/gcc/testsuite/gcc.dg/builtin-object-size-7.c b/gcc/testsuite/gcc.dg/builtin-object-size-7.c
new file mode 100644
index 0000000..41742b9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/builtin-object-size-7.c
@@ -0,0 +1,71 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+typedef __SIZE_TYPE__ size_t;
+extern void *malloc (size_t);
+extern void abort (void);
+
+struct A
+{
+ int i, j, k;
+ char buf[255];
+ int l, m, n, o;
+};
+
+int
+main (void)
+{
+ const size_t s = sizeof (struct A);
+ const size_t o = __builtin_offsetof (struct A, buf);
+ struct A *a = malloc (s);
+ struct A *b = malloc (o + 212);
+ if (__builtin_object_size (a->buf, 0) != s - o)
+ abort ();
+ if (__builtin_object_size (a->buf, 1) != sizeof (a->buf))
+ abort ();
+ if (__builtin_object_size (a->buf, 2) != s - o)
+ abort ();
+ if (__builtin_object_size (a->buf, 3) != sizeof (a->buf))
+ abort ();
+ if (__builtin_object_size (&a->buf[0], 0) != s - o)
+ abort ();
+ if (__builtin_object_size (&a->buf[0], 1) != sizeof (a->buf))
+ abort ();
+ if (__builtin_object_size (&a->buf[0], 2) != s - o)
+ abort ();
+ if (__builtin_object_size (&a->buf[0], 3) != sizeof (a->buf))
+ abort ();
+ if (__builtin_object_size (&a->buf[6], 0) != s - o - 6)
+ abort ();
+ if (__builtin_object_size (&a->buf[6], 1) != sizeof (a->buf) - 6)
+ abort ();
+ if (__builtin_object_size (&a->buf[6], 2) != s - o - 6)
+ abort ();
+ if (__builtin_object_size (&a->buf[6], 3) != sizeof (a->buf) - 6)
+ abort ();
+ if (__builtin_object_size (b->buf, 0) != 212)
+ abort ();
+ if (__builtin_object_size (b->buf, 1) != 212)
+ abort ();
+ if (__builtin_object_size (b->buf, 2) != 212)
+ abort ();
+ if (__builtin_object_size (b->buf, 3) != 212)
+ abort ();
+ if (__builtin_object_size (&b->buf[0], 0) != 212)
+ abort ();
+ if (__builtin_object_size (&b->buf[0], 1) != 212)
+ abort ();
+ if (__builtin_object_size (&b->buf[0], 2) != 212)
+ abort ();
+ if (__builtin_object_size (&b->buf[0], 3) != 212)
+ abort ();
+ if (__builtin_object_size (&b->buf[28], 0) != 212 - 28)
+ abort ();
+ if (__builtin_object_size (&b->buf[28], 1) != 212 - 28)
+ abort ();
+ if (__builtin_object_size (&b->buf[28], 2) != 212 - 28)
+ abort ();
+ if (__builtin_object_size (&b->buf[28], 3) != 212 - 28)
+ abort ();
+ return 0;
+}
diff --git a/gcc/tree-object-size.c b/gcc/tree-object-size.c
index dbd8af4..ebef69c 100644
--- a/gcc/tree-object-size.c
+++ b/gcc/tree-object-size.c
@@ -317,7 +317,7 @@ addr_object_size (struct object_size_info *osi, const_tree ptr,
&& tree_int_cst_lt (pt_var_size, bytes2))
bytes2 = size_zero_node;
else
- bytes2 = size_binop (MINUS_EXPR, var_size, bytes2);
+ bytes2 = size_binop (MINUS_EXPR, pt_var_size, bytes2);
bytes = size_binop (MIN_EXPR, bytes, bytes2);
}
}