Taking a Diagnostic by move would break the usual pattern `diag.label(..).emit()`.
itertools
Please read the rustc-dev-guide chapter on Backend Agnostic Codegen.