Node::Expr(&Expr { kind: ExprKind::InlineAsm(asm), .. })
| Node::Item(&Item { kind: ItemKind::GlobalAsm(asm), .. })
if asm.operands.iter().any(|(op, _op_sp)| match op {
- hir::InlineAsmOperand::Const { anon_const } => anon_const.hir_id == hir_id,
+ hir::InlineAsmOperand::Const { anon_const }
+ | hir::InlineAsmOperand::SymFn { anon_const } => anon_const.hir_id == hir_id,
_ => false,
}) =>
{
if let Some(prev) = self.found {
if concrete_type.ty != prev.ty && !(concrete_type, prev).references_error() {
- // Found different concrete types for the opaque type.
- let mut err = self.tcx.sess.struct_span_err(
- concrete_type.span,
- "concrete type differs from previous defining opaque type use",
- );
- err.span_label(
- concrete_type.span,
- format!("expected `{}`, got `{}`", prev.ty, concrete_type.ty),
- );
- if prev.span == concrete_type.span {
- err.span_label(prev.span, "this expression supplies two conflicting concrete types for the same opaque type");
- } else {
- err.span_note(prev.span, "previous use here");
- }
- err.emit();
+ prev.report_mismatch(&concrete_type, self.tcx);
}
} else {
self.found = Some(concrete_type);