diff options
Diffstat (limited to 'meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99363.patch')
-rw-r--r-- | meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99363.patch | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99363.patch b/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99363.patch new file mode 100644 index 0000000..7003cf8 --- /dev/null +++ b/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99363.patch @@ -0,0 +1,95 @@ +2010-08-05 Jie Zhang <jie@codesourcery.com> + + Issue #7257 + + Backport from mainline: + + gcc/ + 2010-08-05 Jie Zhang <jie@codesourcery.com> + PR tree-optimization/45144 + * tree-sra.c (type_consists_of_records_p): Return false + if the record contains bit-field. + + gcc/testsuite/ + 2010-08-05 Jie Zhang <jie@codesourcery.com> + PR tree-optimization/45144 + * gcc.dg/tree-ssa/pr45144.c: New test. + + 2010-08-04 Mark Mitchell <mark@codesourcery.com> + + Backport from mainline: + +=== added file 'gcc/testsuite/gcc.dg/tree-ssa/pr45144.c' +--- old/gcc/testsuite/gcc.dg/tree-ssa/pr45144.c 1970-01-01 00:00:00 +0000 ++++ new/gcc/testsuite/gcc.dg/tree-ssa/pr45144.c 2010-08-20 16:04:44 +0000 +@@ -0,0 +1,46 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -fdump-tree-optimized" } */ ++ ++void baz (unsigned); ++ ++extern unsigned buf[]; ++ ++struct A ++{ ++ unsigned a1:10; ++ unsigned a2:3; ++ unsigned:19; ++}; ++ ++union TMP ++{ ++ struct A a; ++ unsigned int b; ++}; ++ ++static unsigned ++foo (struct A *p) ++{ ++ union TMP t; ++ struct A x; ++ ++ x = *p; ++ t.a = x; ++ return t.b; ++} ++ ++void ++bar (unsigned orig, unsigned *new) ++{ ++ struct A a; ++ union TMP s; ++ ++ s.b = orig; ++ a = s.a; ++ if (a.a1) ++ baz (a.a2); ++ *new = foo (&a); ++} ++ ++/* { dg-final { scan-tree-dump "x = a;" "optimized"} } */ ++/* { dg-final { cleanup-tree-dump "optimized" } } */ + +=== modified file 'gcc/tree-sra.c' +--- old/gcc/tree-sra.c 2010-08-10 13:31:21 +0000 ++++ new/gcc/tree-sra.c 2010-08-20 16:04:44 +0000 +@@ -805,7 +805,7 @@ + /* Return true iff TYPE is a RECORD_TYPE with fields that are either of gimple + register types or (recursively) records with only these two kinds of fields. + It also returns false if any of these records has a zero-size field as its +- last field. */ ++ last field or has a bit-field. */ + + static bool + type_consists_of_records_p (tree type) +@@ -821,6 +821,9 @@ + { + tree ft = TREE_TYPE (fld); + ++ if (DECL_BIT_FIELD (fld)) ++ return false; ++ + if (!is_gimple_reg_type (ft) + && !type_consists_of_records_p (ft)) + return false; + |