aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorMarkus Trippelsdorf <trippels@gcc.gnu.org>2014-10-17 05:10:07 +0000
committerMarkus Trippelsdorf <trippels@gcc.gnu.org>2014-10-17 05:10:07 +0000
commit5fcffe51f0feba3b795e6668582c63760db8389a (patch)
tree6d8bcf2cd6b137ef3641d6859e51846fa31622ac /gcc/testsuite
parentd6db0df55666e45c22c11681047c6088e24f0256 (diff)
downloadgcc-5fcffe51f0feba3b795e6668582c63760db8389a.zip
gcc-5fcffe51f0feba3b795e6668582c63760db8389a.tar.gz
gcc-5fcffe51f0feba3b795e6668582c63760db8389a.tar.bz2
Fix pr61848, linux kernel miscompile
This patch cures the linux kernel boot failure when compiled using trunk gcc. At its heart, the problem is caused by merge_decls merging from the old decl to the new decl, then copying back to the old decl and discarding the new. When Jan moved some fields to the symtab, "copying back to the old decl" was lost for those fields. Really, it would be best if merge_decls was rewritten to merge everything to the kept decl, but here I'm just doing that for fields accessed via decl_with_vis.symtab_node. 2014-10-17 Alan Modra <amodra@gmail.com> gcc/c/ PR middle-end/61848 * c-decl.c (merge_decls): Don't merge section name or tls model to newdecl symtab node, instead merge to olddecl. Override existing olddecl section name. Set tls_model for all thread-local vars, not just OMP thread-private ones. Remove incorrect comment. gcc/cp/ PR middle-end/61848 * decl.c (merge_decls): Don't merge section name, comdat group or tls model to newdecl symtab node, instead merge to olddecl. Override existing olddecl section name. Set tls_model for all thread-local vars, not just OMP thread-private ones. Remove incorrect comment. 2014-10-17 Markus Trippelsdorf <markus@trippelsdorf.de> PR middle-end/61848 * g++.dg/torture/pr61848.C: New testcase. * gcc.c-torture/compile/pr61848.c: New testcase. From-SVN: r216361
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/torture/pr61848.C5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr61848.c5
3 files changed, 16 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7f159c6..e24b295 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2014-10-17 Markus Trippelsdorf <markus@trippelsdorf.de>
+
+ PR middle-end/61848
+ * g++.dg/torture/pr61848.C: New testcase.
+ * gcc.c-torture/compile/pr61848.c: New testcase.
+
2014-10-16 Oleg Endo <olegendo@gcc.gnu.org>
* gcc.target/sh/cmpstr.c: Fix excess failures caused by switch to GNU11.
diff --git a/gcc/testsuite/g++.dg/torture/pr61848.C b/gcc/testsuite/g++.dg/torture/pr61848.C
new file mode 100644
index 0000000..beb490c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr61848.C
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target named_sections } */
+/* { dg-final { scan-assembler "mysection" } } */
+extern char foo;
+char foo __attribute__ ((__section__(".mysection")));
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr61848.c b/gcc/testsuite/gcc.c-torture/compile/pr61848.c
new file mode 100644
index 0000000..beb490c
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr61848.c
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target named_sections } */
+/* { dg-final { scan-assembler "mysection" } } */
+extern char foo;
+char foo __attribute__ ((__section__(".mysection")));