[committed] Don't instrument clobbers with asan (PR c++/62017)

Jakub Jelinek jakub@redhat.com
Thu Sep 18 14:12:00 GMT 2014


Hi!

Clobber stmts, being artificial statements, were certainly never
meant to be instrumented.  In 4.8 when asan has been introduced into gcc,
the lhs of clobber could be only a decl and as a whole decl store would not
be really instrumented, but with *this clobbers in 4.9 that is no longer the
case.

Fixed thusly, tested on x86_64-linux, committed to trunk and 4.9 as obvious.

2014-09-18  Jakub Jelinek  <jakub@redhat.com>

	PR c++/62017
	* asan.c (transform_statements): Don't instrument clobber statements.

	* g++.dg/asan/pr62017.C: New test.

--- gcc/asan.c.jj	2014-09-08 22:12:52.000000000 +0200
+++ gcc/asan.c	2014-09-18 14:34:30.023446693 +0200
@@ -2072,6 +2072,7 @@ transform_statements (void)
 	  if (has_stmt_been_instrumented_p (s))
 	    gsi_next (&i);
 	  else if (gimple_assign_single_p (s)
+		   && !gimple_clobber_p (s)
 		   && maybe_instrument_assignment (&i))
 	    /*  Nothing to do as maybe_instrument_assignment advanced
 		the iterator I.  */;
--- gcc/testsuite/g++.dg/asan/pr62017.C.jj	2014-09-18 14:44:03.964525585 +0200
+++ gcc/testsuite/g++.dg/asan/pr62017.C	2014-09-18 14:43:52.000000000 +0200
@@ -0,0 +1,17 @@
+// PR c++/62017
+// { dg-do run }
+
+struct A
+{
+  int x;
+  virtual ~A () {}
+};
+struct B : public virtual A {};
+struct C : public virtual A {};
+struct D : public B, virtual public C {};
+
+int
+main ()
+{
+  D d;
+}

	Jakub



More information about the Gcc-patches mailing list