aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorDiego Novillo <dnovillo@redhat.com>2004-08-12 14:34:11 +0000
committerDiego Novillo <dnovillo@gcc.gnu.org>2004-08-12 10:34:11 -0400
commitc597ef4eab9a2de9ad0b2187547ac9bac0b53132 (patch)
treea0fa15664fe5d4dfd7f6bced8b73b4839f33dfcb /libjava
parentab5c8549a48977b865f8ed8dd4bd4e745b1cec75 (diff)
downloadgcc-c597ef4eab9a2de9ad0b2187547ac9bac0b53132.zip
gcc-c597ef4eab9a2de9ad0b2187547ac9bac0b53132.tar.gz
gcc-c597ef4eab9a2de9ad0b2187547ac9bac0b53132.tar.bz2
re PR tree-optimization/16867 (Inline array initializer miscompilation at -O)
PR tree-optimization/16867 * tree.c (is_global_var): New function. (needs_to_live_in_memory): Check for TREE_ADDRESSABLE. Call is_global_var. * tree.h (DECL_NEEDS_TO_LIVE_IN_MEMORY_INTERNAL): Remove. Update all users. (is_global_var): Declare. * tree-dfa.c (dump_variable): Display global and addressable attributes. (add_referenced_var): Clarify documentation when marking variables call-clobbered. * tree-flow-inline.h (is_call_clobbered): Call is_global_var instead of needs_to_live_in_memory. (mark_call_clobbered): If the variable is a tag, mark it DECL_EXTERNAL. * tree-gimple.c (is_gimple_reg): Don't check for TREE_ADDRESSABLE. (is_gimple_non_addressable): Likewise. * tree-ssa-alias.c (get_nmt_for): Always check whether the tag needs to be marked call-clobbered. (setup_pointers_and_addressables): Call is_global_var instead of needs_to_live_in_memory. * tree-ssa-dce.c (need_to_preserve_store): Remove. Update all users with is_global_var. (mark_stmt_if_obviously_necessary): Fix processing of aliased stores. Don't check the virtual definitions. Rather, check whether the store is going into global memory. (find_obviously_necessary_stmts): Get the symbol from the PHI result. * tree-ssa-operands.c (get_call_expr_operands): Do not add clobbering may-defs if the call does not have side effects. libjava/ChangeLog PR tree-optimization/16867 * testsuite/libjava.lang/PR16867.java: New test. From-SVN: r85874
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog5
-rw-r--r--libjava/testsuite/libjava.lang/PR16867.java17
-rw-r--r--libjava/testsuite/libjava.lang/PR16867.out1
3 files changed, 23 insertions, 0 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 1d2af7a..54e307c 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,8 @@
+2004-08-12 Diego Novillo <dnovillo@redhat.com>
+
+ PR tree-optimization/16867
+ * testsuite/libjava.lang/PR16867.java: New test.
+
2004-08-09 Per Bothner <per@bothner.com>
* gcj/javaprims.h (_Jv_Utf8Const): Change struct to a class,
diff --git a/libjava/testsuite/libjava.lang/PR16867.java b/libjava/testsuite/libjava.lang/PR16867.java
new file mode 100644
index 0000000..6862892
--- /dev/null
+++ b/libjava/testsuite/libjava.lang/PR16867.java
@@ -0,0 +1,17 @@
+/* SSA-DCE was removing the initialization of the temporary object
+ in getFoo because it wasn't realizing that the pointer was needed
+ outside of it. */
+
+public class PR16867
+{
+ public static Object[] getFoo()
+ {
+ return new Object[] {"OK"};
+ }
+
+ public static void main(String[] args)
+ {
+ Object[] a = getFoo();
+ System.out.println(a[0]);
+ }
+}
diff --git a/libjava/testsuite/libjava.lang/PR16867.out b/libjava/testsuite/libjava.lang/PR16867.out
new file mode 100644
index 0000000..d86bac9
--- /dev/null
+++ b/libjava/testsuite/libjava.lang/PR16867.out
@@ -0,0 +1 @@
+OK