about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc_trans/debuginfo/metadata.rs6
-rw-r--r--src/test/debuginfo/struct-namespace.rs70
2 files changed, 73 insertions, 3 deletions
diff --git a/src/librustc_trans/debuginfo/metadata.rs b/src/librustc_trans/debuginfo/metadata.rs
index de403732269..cc20751a0b0 100644
--- a/src/librustc_trans/debuginfo/metadata.rs
+++ b/src/librustc_trans/debuginfo/metadata.rs
@@ -1159,12 +1159,12 @@ fn prepare_struct_metadata<'a, 'tcx>(cx: &CrateContext<'a, 'tcx>,
     let struct_name = compute_debuginfo_type_name(cx, struct_type, false);
     let struct_llvm_type = type_of::in_memory_type_of(cx, struct_type);
 
-    let (variant, substs) = match struct_type.sty {
-        ty::TyStruct(def, substs) => (def.struct_variant(), substs),
+    let (struct_def_id, variant, substs) = match struct_type.sty {
+        ty::TyStruct(def, substs) => (def.did, def.struct_variant(), substs),
         _ => bug!("prepare_struct_metadata on a non-struct")
     };
 
-    let (containing_scope, _) = get_namespace_and_span_for_item(cx, variant.did);
+    let (containing_scope, _) = get_namespace_and_span_for_item(cx, struct_def_id);
 
     let struct_metadata_stub = create_struct_stub(cx,
                                                   struct_llvm_type,
diff --git a/src/test/debuginfo/struct-namespace.rs b/src/test/debuginfo/struct-namespace.rs
new file mode 100644
index 00000000000..3fd4cf57b2a
--- /dev/null
+++ b/src/test/debuginfo/struct-namespace.rs
@@ -0,0 +1,70 @@
+// Copyright 2013-2016 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// ignore-gdb
+// compile-flags:-g
+// min-lldb-version: 310
+
+// Check that structs get placed in the correct namespace
+
+// lldb-command:run
+// lldb-command:p struct1
+// lldb-check:(struct_namespace::Struct1) $0 = [...]
+// lldb-command:p struct2
+// lldb-check:(struct_namespace::Struct2) $1 = [...]
+
+// lldb-command:p mod1_struct1
+// lldb-check:(struct_namespace::mod1::Struct1) $2 = [...]
+// lldb-command:p mod1_struct2
+// lldb-check:(struct_namespace::mod1::Struct2) $3 = [...]
+
+#![allow(unused_variables)]
+#![allow(dead_code)]
+#![feature(omit_gdb_pretty_printer_section)]
+#![omit_gdb_pretty_printer_section]
+
+struct Struct1 {
+    a: u32,
+    b: u64,
+}
+
+struct Struct2(u32);
+
+mod mod1 {
+
+    pub struct Struct1 {
+        pub a: u32,
+        pub b: u64,
+    }
+
+    pub struct Struct2(pub u32);
+}
+
+
+fn main() {
+    let struct1 = Struct1 {
+        a: 0,
+        b: 1,
+    };
+
+    let struct2 = Struct2(2);
+
+    let mod1_struct1 = mod1::Struct1 {
+        a: 3,
+        b: 4,
+    };
+
+    let mod1_struct2 = mod1::Struct2(5);
+
+    zzz(); // #break
+}
+
+#[inline(never)]
+fn zzz() {()}