* tree-ssa-alias.c (setup_pointers_and_addressables): Don't
authordnovillo <dnovillo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 18 Sep 2004 13:56:23 +0000 (13:56 +0000)
committerdnovillo <dnovillo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 18 Sep 2004 13:56:23 +0000 (13:56 +0000)
remove TREE_ADDRESSABLE from RESULT_DECL.

testsuite/ChangeLog

* g++.dg/tree-ssa/pr17153.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@87703 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/tree-ssa/pr17153.C [new file with mode: 0644]
gcc/tree-ssa-alias.c

index 5981fed..8ac6692 100644 (file)
@@ -1,5 +1,10 @@
 2004-09-18  Diego Novillo  <dnovillo@redhat.com>
 
+       * tree-ssa-alias.c (setup_pointers_and_addressables): Don't
+       remove TREE_ADDRESSABLE from RESULT_DECL.
+
+2004-09-18  Diego Novillo  <dnovillo@redhat.com>
+
        * tree-ssa-alias.c (dump_alias_info): Ignore NULL SSA_NAMEs.
 
 2004-09-18  Jan Hubicka  <jh@suse.cz>
index ddc44e6..4bb4604 100644 (file)
@@ -1,3 +1,7 @@
+2004-09-18  Diego Novillo  <dnovillo@redhat.com>
+
+       * g++.dg/tree-ssa/pr17153.C: New test.
+
 2004-09-16  Geoffrey Keating  <geoffk@apple.com>
 
        PR pch/13361
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr17153.C b/gcc/testsuite/g++.dg/tree-ssa/pr17153.C
new file mode 100644 (file)
index 0000000..91b4cfe
--- /dev/null
@@ -0,0 +1,17 @@
+/* The alias analyzer was marking RETVAL non-addressable, but RETVAL
+   is a special variable that's available across different functions.  */
+void foo(const char*);
+
+struct A {};
+
+struct B : A
+{
+    B(){}
+    B bar()
+    {
+        foo(__PRETTY_FUNCTION__);
+        return B();
+    };
+};
+
+B b=B().bar();
index 34d9bb0..baf5ff2 100644 (file)
@@ -1347,6 +1347,7 @@ setup_pointers_and_addressables (struct alias_info *ai)
        {
          if (!bitmap_bit_p (ai->addresses_needed, v_ann->uid)
              && v_ann->mem_tag_kind == NOT_A_TAG
+             && TREE_CODE (var) != RESULT_DECL
              && !is_global_var (var))
            {
              /* The address of VAR is not needed, remove the