Full copy of tagged union just to check tag in debug mode?

I was playing with TSan, adding instrumentation to zio so that it can detect coroutine switches and was very surprised it flagged some of my internal code. It turns out if I do &self.foo.bar to take the reference, Zig 0.16 in debug mode (both self-hosted and LLVM) actually copies the entire self.foo into temporary memory just to check the tag. It correctly reads just the tag in ReleaseSafe, and obviously nothing in ReleaseFast. In another thread, I do atomic fetchAdd on a field inside self.foo.bar, so TSan classifies as a race. Is this a bug? Or should I only use TSan in release mode?