Blob Blame History Raw
2015-02-10  Richard Henderson  <rth@redhat.com>

	PR sanitizer/65000
	* tree-eh.c (mark_reachable_handlers): Mark regions mentioned in
	__builtin_eh_copy_values as reachable.

--- gcc/tree-eh.c
+++ gcc/tree-eh.c
@@ -3859,6 +3859,17 @@ mark_reachable_handlers (sbitmap *r_reachablep, sbitmap *lp_reachablep)
 			      gimple_eh_dispatch_region (
                                 as_a <geh_dispatch *> (stmt)));
 	      break;
+	    case GIMPLE_CALL:
+	      if (gimple_call_builtin_p (stmt, BUILT_IN_EH_COPY_VALUES))
+		for (int i = 0; i < 2; ++i)
+		  {
+		    tree rt = gimple_call_arg (stmt, i);
+		    HOST_WIDE_INT ri = tree_to_shwi (rt);
+
+		    gcc_assert (ri = (int)ri);
+		    bitmap_set_bit (r_reachable, ri);
+		  }
+	      break;
 	    default:
 	      break;
 	    }