aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2017-07-28 13:56:47 +0200
committerMartin Liska <marxin@gcc.gnu.org>2017-07-28 11:56:47 +0000
commit6d7649f8b71f9a16b5e9de0b3f8826c5039fa069 (patch)
tree813973611a321535c3cd8332ad2c600149d0820b
parent92e29a5e86c8adc88ee17a483d7284d7bb9e090c (diff)
downloadgcc-6d7649f8b71f9a16b5e9de0b3f8826c5039fa069.zip
gcc-6d7649f8b71f9a16b5e9de0b3f8826c5039fa069.tar.gz
gcc-6d7649f8b71f9a16b5e9de0b3f8826c5039fa069.tar.bz2
Set DECL_VALUE_EXPR after a debug stmt is generated (PR sanitizer/81340).
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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/sanopt.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/asan/pr81340.C22
4 files changed, 36 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 964fa1c..5aaf585 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/sanopt.c b/gcc/sanopt.c
index b845f2f..f6dd14d 100644
--- a/gcc/sanopt.c
+++ b/gcc/sanopt.c
@@ -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);
}
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 396f0b1..b82e9bd 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..76ac08a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/asan/pr81340.C
@@ -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);
+}