re PR sanitizer/64265 (r217669 broke tsan)
authorJakub Jelinek <jakub@redhat.com>
Mon, 15 Dec 2014 09:37:47 +0000 (10:37 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 15 Dec 2014 09:37:47 +0000 (10:37 +0100)
PR sanitizer/64265
* tsan.c (instrument_func_entry): Insert __tsan_func_entry
call on edge from entry block to single succ instead
of after labels of single succ of entry block.

From-SVN: r218734

gcc/ChangeLog
gcc/tsan.c

index 2e0ca74784d8cb09b0db2273f4913211cf5863cb..a6beef99e8923d9b5114610e4d6e2ceddbd021c8 100644 (file)
@@ -1,3 +1,10 @@
+2014-12-15  Jakub Jelinek  <jakub@redhat.com>
+
+       PR sanitizer/64265
+       * tsan.c (instrument_func_entry): Insert __tsan_func_entry
+       call on edge from entry block to single succ instead
+       of after labels of single succ of entry block.
+
 2014-12-15  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/64284
index d221e4565452fed120f654883c06a17bdc74f6f7..678fcdc1f04ccfb0d0a9bcede42dc3eef72c0029 100644 (file)
@@ -652,25 +652,24 @@ instrument_memory_accesses (void)
 static void
 instrument_func_entry (void)
 {
-  basic_block succ_bb;
-  gimple_stmt_iterator gsi;
   tree ret_addr, builtin_decl;
   gimple g;
-
-  succ_bb = single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun));
-  gsi = gsi_after_labels (succ_bb);
+  gimple_seq seq = NULL;
 
   builtin_decl = builtin_decl_implicit (BUILT_IN_RETURN_ADDRESS);
   g = gimple_build_call (builtin_decl, 1, integer_zero_node);
   ret_addr = make_ssa_name (ptr_type_node);
   gimple_call_set_lhs (g, ret_addr);
   gimple_set_location (g, cfun->function_start_locus);
-  gsi_insert_before (&gsi, g, GSI_SAME_STMT);
+  gimple_seq_add_stmt_without_update (&seq, g);
 
-  builtin_decl =  builtin_decl_implicit (BUILT_IN_TSAN_FUNC_ENTRY);
+  builtin_decl = builtin_decl_implicit (BUILT_IN_TSAN_FUNC_ENTRY);
   g = gimple_build_call (builtin_decl, 1, ret_addr);
   gimple_set_location (g, cfun->function_start_locus);
-  gsi_insert_before (&gsi, g, GSI_SAME_STMT);
+  gimple_seq_add_stmt_without_update (&seq, g);
+
+  edge e = single_succ_edge (ENTRY_BLOCK_PTR_FOR_FN (cfun));
+  gsi_insert_seq_on_edge_immediate (e, seq);
 }
 
 /* Instruments function exits.  */