about summary refs log tree commit diff
diff options
context:
space:
mode:
authorÖmer Sinan Ağacan <omeragacan@gmail.com>2021-02-21 11:15:37 +0300
committerÖmer Sinan Ağacan <omeragacan@gmail.com>2021-02-22 17:36:30 +0300
commit2145a8770c941f79e28cfdabd524ca2aea8ab2b4 (patch)
tree464f1ef871af69349f4b32a06e3f1722c8747812
parent8a9f7862bcfa5870a34bb54f77a03c73d1db5c37 (diff)
downloadrust-2145a8770c941f79e28cfdabd524ca2aea8ab2b4.tar.gz
rust-2145a8770c941f79e28cfdabd524ca2aea8ab2b4.zip
Fix mir-cfg dumps
Fixes #81918
Fixes #82326 (duplicate)
Fixes #82325
-rw-r--r--compiler/rustc_mir/src/util/graphviz.rs23
-rw-r--r--src/test/ui/issues/issue-81918.rs11
2 files changed, 29 insertions, 5 deletions
diff --git a/compiler/rustc_mir/src/util/graphviz.rs b/compiler/rustc_mir/src/util/graphviz.rs
index 37498e50c0e..92c7a358c0a 100644
--- a/compiler/rustc_mir/src/util/graphviz.rs
+++ b/compiler/rustc_mir/src/util/graphviz.rs
@@ -2,7 +2,7 @@ use gsgdt::GraphvizSettings;
 use rustc_graphviz as dot;
 use rustc_hir::def_id::DefId;
 use rustc_middle::mir::*;
-use rustc_middle::ty::TyCtxt;
+use rustc_middle::ty::{self, TyCtxt};
 use std::fmt::Debug;
 use std::io::{self, Write};
 
@@ -16,14 +16,27 @@ where
 {
     let def_ids = dump_mir_def_ids(tcx, single);
 
-    let use_subgraphs = def_ids.len() > 1;
+    let mirs =
+        def_ids
+            .iter()
+            .flat_map(|def_id| {
+                if tcx.is_const_fn_raw(*def_id) {
+                    vec![tcx.optimized_mir(*def_id), tcx.mir_for_ctfe(*def_id)]
+                } else {
+                    vec![tcx.instance_mir(ty::InstanceDef::Item(ty::WithOptConstParam::unknown(
+                        *def_id,
+                    )))]
+                }
+            })
+            .collect::<Vec<_>>();
+
+    let use_subgraphs = mirs.len() > 1;
     if use_subgraphs {
         writeln!(w, "digraph __crate__ {{")?;
     }
 
-    for def_id in def_ids {
-        let body = &tcx.optimized_mir(def_id);
-        write_mir_fn_graphviz(tcx, body, use_subgraphs, w)?;
+    for mir in mirs {
+        write_mir_fn_graphviz(tcx, mir, use_subgraphs, w)?;
     }
 
     if use_subgraphs {
diff --git a/src/test/ui/issues/issue-81918.rs b/src/test/ui/issues/issue-81918.rs
new file mode 100644
index 00000000000..8938b8a6f2c
--- /dev/null
+++ b/src/test/ui/issues/issue-81918.rs
@@ -0,0 +1,11 @@
+// check-pass
+// dont-check-compiler-stdout
+// compile-flags: -Z unpretty=mir-cfg
+
+// This checks that unpretty=mir-cfg does not panic. See #81918.
+
+const TAG: &'static str = "ABCD";
+
+fn main() {
+    if TAG == "" {}
+}