aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenth@gcc.gnu.org>2014-06-11 07:35:36 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2014-06-11 07:35:36 +0000
commit96a3f4dfb60bb315496e00297b9f9b852482dea8 (patch)
tree19c970a2fb41307bac1907c7e58cdc3e31623c91 /gcc
parente257a17cb9cc4dc76a79680616420e75ba030b5f (diff)
downloadgcc-96a3f4dfb60bb315496e00297b9f9b852482dea8.zip
gcc-96a3f4dfb60bb315496e00297b9f9b852482dea8.tar.gz
gcc-96a3f4dfb60bb315496e00297b9f9b852482dea8.tar.bz2
re PR tree-optimization/61437 (wrong code on x86_64-linux-gnu when compile separately)
2014-06-11 Richard Biener <rguenther@suse.de> PR middle-end/61437 Revert 2014-06-04 Richard Biener <rguenther@suse.de> * tree.h (may_be_aliased): Trust TREE_ADDRESSABLE from TREE_PUBLIC and DECL_EXTERNAL decls. * gcc.dg/torture/20140610-1.c: New testcase. * gcc.dg/torture/20140610-2.c: Likewise. From-SVN: r211436
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/torture/20140610-1.c15
-rw-r--r--gcc/testsuite/gcc.dg/torture/20140610-2.c12
-rw-r--r--gcc/tree.h4
5 files changed, 47 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 80887df..e61b75d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2014-06-11 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/61437
+ Revert
+ 2014-06-04 Richard Biener <rguenther@suse.de>
+
+ * tree.h (may_be_aliased): Trust TREE_ADDRESSABLE from
+ TREE_PUBLIC and DECL_EXTERNAL decls.
+
2014-06-10 Jan Hubicka <hubicka@ucw.cz>
* varasm.c (set_implicit_section): New function.
@@ -7,7 +16,8 @@
(default_function_section): Likewise.
(decl_binds_to_current_def_p): Constify argument.
* varasm.h (decl_binds_to_current_def_p): Update prototype.
- * asan.c (asan_protect_global): Use symtab_get_node (decl)->implicit_section.
+ * asan.c (asan_protect_global): Use
+ symtab_get_node (decl)->implicit_section.
* symtab.c (dump_symtab_base): Dump implicit sections.
(verify_symtab_base): Verify sanity of sectoins and comdats.
(symtab_resolve_alias): Alias share the section of its target.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 53b6134..0df18c8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2014-06-11 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/61437
+ * gcc.dg/torture/20140610-1.c: New testcase.
+ * gcc.dg/torture/20140610-2.c: Likewise.
+
2014-06-10 Richard Biener <rguenther@suse.de>
PR tree-optimization/61438
diff --git a/gcc/testsuite/gcc.dg/torture/20140610-1.c b/gcc/testsuite/gcc.dg/torture/20140610-1.c
new file mode 100644
index 0000000..67cf8cd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/20140610-1.c
@@ -0,0 +1,15 @@
+/* { dg-do run } */
+/* { dg-additional-sources "20140610-2.c" } */
+
+extern int a;
+extern int *p;
+
+void test (void);
+
+int main ()
+{
+ *p = 0;
+ a = 1;
+ test ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/20140610-2.c b/gcc/testsuite/gcc.dg/torture/20140610-2.c
new file mode 100644
index 0000000..766e5f2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/20140610-2.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+
+extern void abort (void);
+
+int a;
+int *p = &a;
+
+void test (void)
+{
+ if (a != 1)
+ abort ();
+}
diff --git a/gcc/tree.h b/gcc/tree.h
index 63b714c..981a2c5 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -4524,7 +4524,9 @@ static inline bool
may_be_aliased (const_tree var)
{
return (TREE_CODE (var) != CONST_DECL
- && TREE_ADDRESSABLE (var)
+ && (TREE_PUBLIC (var)
+ || DECL_EXTERNAL (var)
+ || TREE_ADDRESSABLE (var))
&& !((TREE_STATIC (var) || TREE_PUBLIC (var) || DECL_EXTERNAL (var))
&& ((TREE_READONLY (var)
&& !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (var)))