about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNick Cameron <ncameron@mozilla.com>2017-10-31 18:24:48 +1300
committerNick Cameron <ncameron@mozilla.com>2017-10-31 18:24:48 +1300
commita9bafe5c9ee8ce0d20634898e59aed4eb965f343 (patch)
tree281a80a754dafb04b0b69aeb41d256f4a985ad09
parent90ef3372e8ad74517eafa61e9494688c258b15ce (diff)
downloadrust-a9bafe5c9ee8ce0d20634898e59aed4eb965f343.tar.gz
rust-a9bafe5c9ee8ce0d20634898e59aed4eb965f343.zip
save-analysis: support unions
-rw-r--r--src/librustc_save_analysis/dump_visitor.rs11
-rw-r--r--src/test/run-make/save-analysis/foo.rs5
2 files changed, 14 insertions, 2 deletions
diff --git a/src/librustc_save_analysis/dump_visitor.rs b/src/librustc_save_analysis/dump_visitor.rs
index 4eac4398c18..0a005cc5366 100644
--- a/src/librustc_save_analysis/dump_visitor.rs
+++ b/src/librustc_save_analysis/dump_visitor.rs
@@ -554,8 +554,13 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
 
         if !self.span.filter_generated(sub_span, item.span) {
             let span = self.span_from_span(sub_span.expect("No span found for struct"));
+            let kind = match item.node {
+                ast::ItemKind::Struct(_, _) => DefKind::Struct,
+                ast::ItemKind::Union(_, _) => DefKind::Union,
+                _ => unreachable!(),
+            };
             self.dumper.dump_def(item.vis == ast::Visibility::Public, Def {
-                kind: DefKind::Struct,
+                kind,
                 id: ::id_from_node_id(item.id, &self.save_ctxt),
                 span,
                 name,
@@ -1212,7 +1217,9 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> Visitor<'l> for DumpVisitor<'l, 'tc
                 self.process_static_or_const_item(item, typ, expr),
             Const(ref typ, ref expr) =>
                 self.process_static_or_const_item(item, &typ, &expr),
-            Struct(ref def, ref ty_params) => self.process_struct(item, def, ty_params),
+            Struct(ref def, ref ty_params) | Union(ref def, ref ty_params) => {
+                self.process_struct(item, def, ty_params)
+            }
             Enum(ref def, ref ty_params) => self.process_enum(item, def, ty_params),
             Impl(..,
                  ref ty_params,
diff --git a/src/test/run-make/save-analysis/foo.rs b/src/test/run-make/save-analysis/foo.rs
index 5cb363ac344..834a7554a55 100644
--- a/src/test/run-make/save-analysis/foo.rs
+++ b/src/test/run-make/save-analysis/foo.rs
@@ -441,6 +441,11 @@ fn test_format_args() {
     print!("x is {}, y is {1}, name is {n}", x, y, n = name);
 }
 
+
+union TestUnion {
+    f1: u32
+}
+
 struct FrameBuffer;
 
 struct SilenceGenerator;