about summary refs log tree commit diff
path: root/src/librustc_mir
diff options
context:
space:
mode:
authorAmanieu d'Antras <amanieu@gmail.com>2020-05-24 02:04:49 +0100
committerAmanieu d'Antras <amanieu@gmail.com>2020-05-24 02:04:49 +0100
commit3ed1e79cc40133b6cdb65955c7433cc483a89ca8 (patch)
tree26209bd7f48deaf082b0d1dcd25b8a43d7f095c6 /src/librustc_mir
parent215f2d3294b08dbdcf8f7d40de21ef1e7eae0a2d (diff)
downloadrust-3ed1e79cc40133b6cdb65955c7433cc483a89ca8.tar.gz
rust-3ed1e79cc40133b6cdb65955c7433cc483a89ca8.zip
Properly handle InlineAsmOperand::SymFn when collecting monomorphized items
Fixes #72484
Diffstat (limited to 'src/librustc_mir')
-rw-r--r--src/librustc_mir/monomorphize/collector.rs11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/librustc_mir/monomorphize/collector.rs b/src/librustc_mir/monomorphize/collector.rs
index 925b8d32966..3b05ffa567f 100644
--- a/src/librustc_mir/monomorphize/collector.rs
+++ b/src/librustc_mir/monomorphize/collector.rs
@@ -633,14 +633,21 @@ impl<'a, 'tcx> MirVisitor<'tcx> for MirNeighborCollector<'a, 'tcx> {
                 let ty = self.monomorphize(ty);
                 visit_drop_use(self.tcx, ty, true, self.output);
             }
+            mir::TerminatorKind::InlineAsm { ref operands, .. } => {
+                for op in operands {
+                    if let mir::InlineAsmOperand::SymFn { value } = op {
+                        let fn_ty = self.monomorphize(value.literal.ty);
+                        visit_fn_use(self.tcx, fn_ty, false, &mut self.output);
+                    }
+                }
+            }
             mir::TerminatorKind::Goto { .. }
             | mir::TerminatorKind::SwitchInt { .. }
             | mir::TerminatorKind::Resume
             | mir::TerminatorKind::Abort
             | mir::TerminatorKind::Return
             | mir::TerminatorKind::Unreachable
-            | mir::TerminatorKind::Assert { .. }
-            | mir::TerminatorKind::InlineAsm { .. } => {}
+            | mir::TerminatorKind::Assert { .. } => {}
             mir::TerminatorKind::GeneratorDrop
             | mir::TerminatorKind::Yield { .. }
             | mir::TerminatorKind::FalseEdges { .. }