Tested x86_64-pc-linux-gnu, OK for trunk?

-- 8< --

Since my r14-1500-g4d935f52b0d5c0 we promote an initializer_list backing
array to static storage where appropriate, but this happens after we decided
to add it to asan_poisoned_variables.  As a result we add unpoison/poison
for it to the gimple.  But then sanopt removes the unpoison.  So the second
time we call the function and want to load from the array asan still
considers it poisoned.

A simple fix seems to be to not expand unpoison/poison for such a variable,
since by that time we know it's static.

        PR c++/113531

gcc/ChangeLog:

        * asan.cc (asan_expand_mark_ifn): Check TREE_STATIC.

gcc/testsuite/ChangeLog:

        * g++.dg/asan/initlist1.C: New test.
---
 gcc/asan.cc                           |  8 ++++++++
 gcc/testsuite/g++.dg/asan/initlist1.C | 20 ++++++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 gcc/testsuite/g++.dg/asan/initlist1.C

diff --git a/gcc/asan.cc b/gcc/asan.cc
index 0fd7dd1f3ed..efecac2ea2b 100644
--- a/gcc/asan.cc
+++ b/gcc/asan.cc
@@ -3762,6 +3762,14 @@ asan_expand_mark_ifn (gimple_stmt_iterator *iter)
 
   gcc_checking_assert (TREE_CODE (decl) == VAR_DECL);
 
+  if (TREE_STATIC (decl))
+    {
+      /* Don't poison a variable with static storage; it might have gotten
+        marked before gimplify_init_constructor promoted it to static.  */
+      gsi_remove (iter, true);
+      return false;
+    }
+
   if (hwasan_sanitize_p ())
     {
       gcc_assert (param_hwasan_instrument_stack);
diff --git a/gcc/testsuite/g++.dg/asan/initlist1.C 
b/gcc/testsuite/g++.dg/asan/initlist1.C
new file mode 100644
index 00000000000..6cd5b7d3aba
--- /dev/null
+++ b/gcc/testsuite/g++.dg/asan/initlist1.C
@@ -0,0 +1,20 @@
+// PR c++/113531
+// { dg-do run { target c++11 } }
+// { dg-additional-options "-fsanitize=address" }
+
+#include <initializer_list>
+
+void f(int) { }
+
+void g()
+{
+  for (auto i : { 1, 2, 3 })
+    f (i);
+  f(42);
+}
+
+int main()
+{
+  g();
+  g();
+}

base-commit: 209fc1e5f6c67e55e579b69f617b0b678b1bfdf0
-- 
2.39.3

Reply via email to