diff options
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0374-2011-05-31-Richard-Guenther-rguenther-suse.de.patch')
-rw-r--r-- | meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0374-2011-05-31-Richard-Guenther-rguenther-suse.de.patch | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0374-2011-05-31-Richard-Guenther-rguenther-suse.de.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0374-2011-05-31-Richard-Guenther-rguenther-suse.de.patch new file mode 100644 index 0000000000..6c90f4bb8e --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0374-2011-05-31-Richard-Guenther-rguenther-suse.de.patch | |||
@@ -0,0 +1,64 @@ | |||
1 | From 0fdd5e79651b8a9446b6653c66beaee26b67a80a Mon Sep 17 00:00:00 2001 | ||
2 | From: rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | ||
3 | Date: Tue, 31 May 2011 12:25:52 +0000 | ||
4 | Subject: [PATCH] 2011-05-31 Richard Guenther <rguenther@suse.de> | ||
5 | |||
6 | Backport from mainline | ||
7 | 2011-05-19 Richard Guenther <rguenther@suse.de> | ||
8 | |||
9 | PR middle-end/48985 | ||
10 | * tree-object-size.c (addr_object_size): If the pointed-to | ||
11 | variable is a decl use DECL_SIZE_UNIT instead of TYPE_SIZE_UNIT. | ||
12 | |||
13 | * gcc.dg/builtin-object-size-11.c: New testcase. | ||
14 | |||
15 | |||
16 | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@174476 138bc75d-0d04-0410-961f-82ee72b054a4 | ||
17 | |||
18 | index d5ea116..ae5689b 100644 | ||
19 | new file mode 100644 | ||
20 | index 0000000..a98bc35 | ||
21 | --- /dev/null | ||
22 | +++ b/gcc/testsuite/gcc.dg/builtin-object-size-11.c | ||
23 | @@ -0,0 +1,21 @@ | ||
24 | +/* PR48985 */ | ||
25 | +/* { dg-do run } */ | ||
26 | +/* { dg-options "-std=gnu89" } */ | ||
27 | + | ||
28 | +extern void abort (void); | ||
29 | + | ||
30 | +struct s { | ||
31 | + int i; | ||
32 | + char c[]; | ||
33 | +} s = { 1, "01234" }; | ||
34 | + | ||
35 | +__SIZE_TYPE__ f (void) { return __builtin_object_size (&s.c, 0); } | ||
36 | + | ||
37 | +int | ||
38 | +main() | ||
39 | +{ | ||
40 | + if (f() != sizeof ("01234")) | ||
41 | + abort (); | ||
42 | + | ||
43 | + return 0; | ||
44 | +} | ||
45 | diff --git a/gcc/tree-object-size.c b/gcc/tree-object-size.c | ||
46 | index 043b445..41118d2 100644 | ||
47 | --- a/gcc/tree-object-size.c | ||
48 | +++ b/gcc/tree-object-size.c | ||
49 | @@ -205,6 +205,12 @@ addr_object_size (struct object_size_info *osi, const_tree ptr, | ||
50 | pt_var_size = size_int (sz); | ||
51 | } | ||
52 | else if (pt_var | ||
53 | + && DECL_P (pt_var) | ||
54 | + && host_integerp (DECL_SIZE_UNIT (pt_var), 1) | ||
55 | + && (unsigned HOST_WIDE_INT) | ||
56 | + tree_low_cst (DECL_SIZE_UNIT (pt_var), 1) < offset_limit) | ||
57 | + pt_var_size = DECL_SIZE_UNIT (pt_var); | ||
58 | + else if (pt_var | ||
59 | && (SSA_VAR_P (pt_var) || TREE_CODE (pt_var) == STRING_CST) | ||
60 | && TYPE_SIZE_UNIT (TREE_TYPE (pt_var)) | ||
61 | && host_integerp (TYPE_SIZE_UNIT (TREE_TYPE (pt_var)), 1) | ||
62 | -- | ||
63 | 1.7.0.4 | ||
64 | |||