Skip to content

Commit c7d60ee

Browse files
committed
Don't add struct names to the value name space if there's no constructor
Closes #3149
1 parent c5fbff0 commit c7d60ee

File tree

2 files changed

+40
-8
lines changed

2 files changed

+40
-8
lines changed

src/rustc/middle/resolve3.rs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -987,22 +987,30 @@ class Resolver {
987987
}
988988
}
989989
item_class(struct_definition, _) => {
990-
let (name_bindings, new_parent) = self.add_child(atom, parent,
991-
~[ValueNS, TypeNS], sp);
992-
993-
(*name_bindings).define_type(def_ty(local_def(item.id)), sp);
994-
995-
match struct_definition.ctor {
990+
let (name_bindings, new_parent) =
991+
match struct_definition.ctor {
996992
none => {
997-
// Nothing to do.
993+
let (name_bindings, new_parent) = self.add_child(atom,
994+
parent, ~[TypeNS], sp);
995+
996+
(*name_bindings).define_type(def_ty(
997+
local_def(item.id)), sp);
998+
(name_bindings, new_parent)
998999
}
9991000
some(ctor) => {
1001+
let (name_bindings, new_parent) = self.add_child(atom,
1002+
parent, ~[ValueNS, TypeNS], sp);
1003+
1004+
(*name_bindings).define_type(def_ty(
1005+
local_def(item.id)), sp);
1006+
10001007
let purity = ctor.node.dec.purity;
10011008
let ctor_def = def_fn(local_def(ctor.node.id),
10021009
purity);
10031010
(*name_bindings).define_value(ctor_def, sp);
1011+
(name_bindings, new_parent)
10041012
}
1005-
}
1013+
};
10061014

10071015
// Create the set of implementation information that the
10081016
// implementation scopes (ImplScopes) need and write it into

src/test/run-pass/issue-3149.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import Num = num::num;
2+
3+
pure fn Matrix4<T:copy Num>(m11: T, m12: T, m13: T, m14: T,
4+
m21: T, m22: T, m23: T, m24: T,
5+
m31: T, m32: T, m33: T, m34: T,
6+
m41: T, m42: T, m43: T, m44: T)
7+
-> Matrix4<T> {
8+
9+
Matrix4 {
10+
m11: m11, m12: m12, m13: m13, m14: m14,
11+
m21: m21, m22: m22, m23: m23, m24: m24,
12+
m31: m31, m32: m32, m33: m33, m34: m34,
13+
m41: m41, m42: m42, m43: m43, m44: m44
14+
}
15+
}
16+
17+
struct Matrix4<T:copy Num> {
18+
let m11: T; let m12: T; let m13: T; let m14: T;
19+
let m21: T; let m22: T; let m23: T; let m24: T;
20+
let m31: T; let m32: T; let m33: T; let m34: T;
21+
let m41: T; let m42: T; let m43: T; let m44: T;
22+
}
23+
24+
fn main() {}

0 commit comments

Comments
 (0)