]> gcc.gnu.org Git - gcc.git/commitdiff
Mare return to clear EAF_UNUSED flag.
authorJan Hubicka <jh@suse.cz>
Sun, 15 Nov 2020 14:10:22 +0000 (15:10 +0100)
committerJan Hubicka <jh@suse.cz>
Sun, 15 Nov 2020 14:10:22 +0000 (15:10 +0100)
gcc/ChangeLog:
* ipa-modref.c (analyze_ssa_name_flags): Make return to clear
EAF_UNUSED flag.

gcc/testsuite/ChangeLog:
* gcc.c-torture/execute/pr97836.c: New test.

gcc/ipa-modref.c
gcc/testsuite/gcc.c-torture/execute/pr97836.c [new file with mode: 0644]

index 5273c200f00976beeed2f0fea4daa6cd547bcad8..4a43c50aa661c218acd3fa47c562ea89508d8b2a 100644 (file)
@@ -1224,10 +1224,12 @@ analyze_ssa_name_flags (tree name, vec<unsigned char> &known_flags, int depth)
          print_gimple_stmt (dump_file, use_stmt, 0);
        }
 
-      /* Gimple return may load the return value.  */
+      /* Gimple return may load the return value.
+        Returning name counts as an use by tree-ssa-structalias.c  */
       if (greturn *ret = dyn_cast <greturn *> (use_stmt))
        {
-         if (memory_access_to (gimple_return_retval (ret), name))
+         if (memory_access_to (gimple_return_retval (ret), name)
+             || name == gimple_return_retval (ret))
            flags &= ~EAF_UNUSED;
        }
       /* Account for LHS store, arg loads and flags from callee function.  */
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr97836.c b/gcc/testsuite/gcc.c-torture/execute/pr97836.c
new file mode 100644 (file)
index 0000000..4585e1f
--- /dev/null
@@ -0,0 +1,17 @@
+int a;
+
+int b(int c) { return 0; }
+
+static int *d(int *e) {
+  if (a) {
+    a = a && b(*e);
+  }
+  return e;
+}
+
+int main() {
+  int f;
+  if (d(&f) != &f)
+    __builtin_abort();
+  return 0;
+}
This page took 0.072896 seconds and 5 git commands to generate.