aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr70602.c23
-rw-r--r--gcc/tree-sra.c3
4 files changed, 35 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index edd3304..62c8372 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2016-04-12 Jakub Jelinek <jakub@redhat.com>
+ PR tree-optimization/70602
+ * tree-sra.c (generate_subtree_copies): Don't write anything into
+ constant pool decls.
+
* omp-low.c (lower_omp_target): Use GOMP_MAP_FIRSTPRIVATE_INT
regardless whether there are depend clauses or not.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index aa5c77c..7aaee6e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-04-12 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/70602
+ * gcc.c-torture/execute/pr70602.c: New test.
+
2016-04-11 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/70381
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr70602.c b/gcc/testsuite/gcc.c-torture/execute/pr70602.c
new file mode 100644
index 0000000..c6628b0
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr70602.c
@@ -0,0 +1,23 @@
+/* PR tree-optimization/70602 */
+
+struct __attribute__((packed)) S
+{
+ int s : 1;
+ int t : 20;
+};
+
+int a, b, c;
+
+int
+main ()
+{
+ for (; a < 1; a++)
+ {
+ struct S e[] = { {0, 9}, {0, 9}, {0, 9}, {0, 0}, {0, 9}, {0, 9}, {0, 9},
+ {0, 0}, {0, 9}, {0, 9}, {0, 9}, {0, 0}, {0, 9}, {0, 9},
+ {0, 9}, {0, 0}, {0, 9}, {0, 9}, {0, 9}, {0, 0}, {0, 9} };
+ b = b || e[0].s;
+ c = e[0].t;
+ }
+ return 0;
+}
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index 738c1a7..1d2b1c5 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -2743,6 +2743,9 @@ generate_subtree_copies (struct access *access, tree agg,
gimple_stmt_iterator *gsi, bool write,
bool insert_after, location_t loc)
{
+ /* Never write anything into constant pool decls. See PR70602. */
+ if (!write && constant_decl_p (agg))
+ return;
do
{
if (chunk_size && access->offset >= start_offset + chunk_size)