Set DECL_VALUE_EXPR after a debug stmt is generated (PR sanitizer/81340).
authorMartin Liska <mliska@suse.cz>
Fri, 28 Jul 2017 11:56:47 +0000 (13:56 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Fri, 28 Jul 2017 11:56:47 +0000 (11:56 +0000)
2017-07-28  Martin Liska  <mliska@suse.cz>

PR sanitizer/81340
* sanopt.c (sanitize_rewrite_addressable_params): Set VALUE_EXPR after
gimple_build_debug_bind.
2017-07-28  Martin Liska  <mliska@suse.cz>

PR sanitizer/81340
* g++.dg/asan/pr81340.C: New test.

From-SVN: r250660

gcc/ChangeLog
gcc/sanopt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/asan/pr81340.C [new file with mode: 0644]

index 964fa1cdc9cf6b9b75a6459aebb60d03f26a7035..5aaf5856701555fe84e30a36199729a14ce1388b 100644 (file)
@@ -1,3 +1,9 @@
+2017-07-28  Martin Liska  <mliska@suse.cz>
+
+       PR sanitizer/81340
+       * sanopt.c (sanitize_rewrite_addressable_params): Set VALUE_EXPR after
+       gimple_build_debug_bind.
+
 2017-07-28  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/81502
index b845f2fab31a8e6465a66201faf6714448d92271..f6dd14da00d451c49a6571729a902b69e1e60d19 100644 (file)
@@ -916,8 +916,6 @@ sanitize_rewrite_addressable_params (function *fun)
                     IDENTIFIER_POINTER (DECL_NAME (arg)));
 
          gcc_assert (!DECL_HAS_VALUE_EXPR_P (arg));
-         DECL_HAS_VALUE_EXPR_P (arg) = 1;
-         SET_DECL_VALUE_EXPR (arg, var);
 
          SET_DECL_PT_UID (var, DECL_PT_UID (arg));
 
@@ -946,6 +944,9 @@ sanitize_rewrite_addressable_params (function *fun)
              gimple_seq_add_stmt (&stmts, g);
              clear_value_expr_list.safe_push (arg);
            }
+
+         DECL_HAS_VALUE_EXPR_P (arg) = 1;
+         SET_DECL_VALUE_EXPR (arg, var);
        }
     }
 
index 396f0b1fa982be98166b7833a9b98cdcae3ab3b3..b82e9bdd9be1be95abfd23f41f6f2285794749d4 100644 (file)
@@ -1,3 +1,8 @@
+2017-07-28  Martin Liska  <mliska@suse.cz>
+
+       PR sanitizer/81340
+       * g++.dg/asan/pr81340.C: New test.
+
 2017-07-28  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/81502
diff --git a/gcc/testsuite/g++.dg/asan/pr81340.C b/gcc/testsuite/g++.dg/asan/pr81340.C
new file mode 100644 (file)
index 0000000..76ac08a
--- /dev/null
@@ -0,0 +1,22 @@
+// { dg-options "-fsanitize=address -O2 -g -Wno-write-strings" }
+
+class a {
+  struct b {
+    b(int, int);
+  } c;
+
+public:
+  int d;
+  a(char *) : c(0, d) {}
+};
+class e {
+  int f(const int &, const int &, const int &, bool, bool, bool, int, bool);
+};
+class g {
+public:
+  static g *h();
+  void i(a, void *);
+};
+int e::f(const int &, const int &, const int &, bool j, bool, bool, int, bool) {
+  g::h()->i("", &j);
+}