The synchronous dispatch functions in GCD (dispatch_sync, dispatch_barrier_sync), don't make a copy of the passed block. To maintain binary compatibility, we should avoid doing that as well in TSan, as there's no reason to do that. The synchronous dispatch functions will not return before the block is actually executed.
rdar://problem/42242579
For the purposes of examining test artifacts after tests have run, it's probably better to give your executables different names (e.g. %t_no_tsan and %t_with_tsan).