]> git.lizzy.rs Git - rust.git/commitdiff
Fix handling on InlineAsm for the unconditional recursion lint.
authorAmanieu d'Antras <amanieu@gmail.com>
Fri, 8 May 2020 20:00:33 +0000 (21:00 +0100)
committerAmanieu d'Antras <amanieu@gmail.com>
Mon, 18 May 2020 13:41:34 +0000 (14:41 +0100)
src/librustc_mir_build/lints.rs

index 161023f1613838708b5bd6ac18c836a5c24b11a1..dbafc98fb50f1633809557d5721d1b67680779eb 100644 (file)
@@ -114,9 +114,14 @@ fn node_examined(
             | TerminatorKind::Unreachable
             | TerminatorKind::Yield { .. } => ControlFlow::Break(NonRecursive),
 
-            // FIXME(Amanieu): I am not 100% sure about this, but it triggers
-            // a spurious warning otherwise.
-            TerminatorKind::InlineAsm { .. } => ControlFlow::Break(NonRecursive),
+            // A diverging InlineAsm is treated as non-recursing
+            TerminatorKind::InlineAsm { destination, .. } => {
+                if destination.is_some() {
+                    ControlFlow::Continue
+                } else {
+                    ControlFlow::Break(NonRecursive)
+                }
+            }
 
             // These do not.
             TerminatorKind::Assert { .. }