[committed] Fix -fsanitize-coverage=trace-pc -fcompare-debug bug (PR sanitizer/80444)

Message ID 20170418150408.GX1809@tucnak
State New
Headers show

Commit Message

Jakub Jelinek April 18, 2017, 3:04 p.m.
Hi!

As the pass doesn't want to insert into empty bbs and also copies
locus from the stmt it is inserted before, we have to make sure we insert
it before non-debug stmt (and as empty bb also consider blocks with just
labels and debug stmts).

Bootstrapped/regtested on x86_64-linux and i686-linux, committed as obvious.

2017-04-18  Jakub Jelinek  <jakub@redhat.com>

	PR sanitizer/80444
	* sancov.c (sancov_pass): Use gsi_start_nondebug_after_labels_bb
	instead of gsi_after_labels.

	* gcc.dg/sancov/pr80444.c: New test.


	Jakub

Patch

--- gcc/sancov.c.jj	2017-01-01 12:45:38.000000000 +0100
+++ gcc/sancov.c	2017-04-18 09:14:58.567233552 +0200
@@ -46,7 +46,7 @@  sancov_pass (function *fun)
   basic_block bb;
   FOR_EACH_BB_FN (bb, fun)
     {
-      gimple_stmt_iterator gsi = gsi_after_labels (bb);
+      gimple_stmt_iterator gsi = gsi_start_nondebug_after_labels_bb (bb);
       if (gsi_end_p (gsi))
 	continue;
       gimple *stmt = gsi_stmt (gsi);
--- gcc/testsuite/gcc.dg/sancov/pr80444.c.jj	2017-04-18 09:16:34.480933807 +0200
+++ gcc/testsuite/gcc.dg/sancov/pr80444.c	2017-04-18 09:17:24.322256958 +0200
@@ -0,0 +1,9 @@ 
+/* PR sanitizer/80444 */
+/* { dg-do compile } */
+/* { dg-options "-fsanitize-coverage=trace-pc -fcompare-debug" } */
+
+void
+foo (void)
+{
+  int a = 0;
+}