about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc/metadata/tydecode.rs7
-rw-r--r--src/test/auxiliary/kinds_in_metadata.rs9
-rw-r--r--src/test/auxiliary/trait_superkinds_in_metadata.rs1
-rw-r--r--src/test/run-pass/builtin-superkinds-in-metadata.rs3
-rw-r--r--src/test/run-pass/kinds-in-metadata.rs16
5 files changed, 34 insertions, 2 deletions
diff --git a/src/librustc/metadata/tydecode.rs b/src/librustc/metadata/tydecode.rs
index 27f43a0ef53..9f91fa6ed8f 100644
--- a/src/librustc/metadata/tydecode.rs
+++ b/src/librustc/metadata/tydecode.rs
@@ -590,14 +590,17 @@ fn parse_bounds(st: &mut PState, conv: conv_did) -> ty::ParamBounds {
             'Z' => {
                 param_bounds.builtin_bounds.add(ty::BoundSized);
             }
+            'P' => {
+                param_bounds.builtin_bounds.add(ty::BoundPod);
+            }
             'I' => {
                 param_bounds.trait_bounds.push(@parse_trait_ref(st, |x,y| conv(x,y)));
             }
             '.' => {
                 return param_bounds;
             }
-            _ => {
-                fail!("parse_bounds: bad bounds")
+            c => {
+                fail!("parse_bounds: bad bounds ('{}')", c)
             }
         }
     }
diff --git a/src/test/auxiliary/kinds_in_metadata.rs b/src/test/auxiliary/kinds_in_metadata.rs
new file mode 100644
index 00000000000..a8f8dbf318d
--- /dev/null
+++ b/src/test/auxiliary/kinds_in_metadata.rs
@@ -0,0 +1,9 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Tests that metadata serialization works for the `Pod` kind.
+
+#[crate_type="lib"];
+
+pub fn f<T:Pod>() {}
+
diff --git a/src/test/auxiliary/trait_superkinds_in_metadata.rs b/src/test/auxiliary/trait_superkinds_in_metadata.rs
index dfb0c0310ec..2345724e8c2 100644
--- a/src/test/auxiliary/trait_superkinds_in_metadata.rs
+++ b/src/test/auxiliary/trait_superkinds_in_metadata.rs
@@ -15,3 +15,4 @@
 
 pub trait RequiresFreeze : Freeze { }
 pub trait RequiresRequiresFreezeAndSend : RequiresFreeze + Send { }
+pub trait RequiresPod : Pod { }
diff --git a/src/test/run-pass/builtin-superkinds-in-metadata.rs b/src/test/run-pass/builtin-superkinds-in-metadata.rs
index e2fc6cc335f..f285275f5e2 100644
--- a/src/test/run-pass/builtin-superkinds-in-metadata.rs
+++ b/src/test/run-pass/builtin-superkinds-in-metadata.rs
@@ -16,6 +16,7 @@
 
 extern mod trait_superkinds_in_metadata;
 use trait_superkinds_in_metadata::{RequiresRequiresFreezeAndSend, RequiresFreeze};
+use trait_superkinds_in_metadata::{RequiresPod};
 
 struct X<T>(T);
 
@@ -23,4 +24,6 @@ impl <T:Freeze> RequiresFreeze for X<T> { }
 
 impl <T:Freeze+Send> RequiresRequiresFreezeAndSend for X<T> { }
 
+impl <T:Pod> RequiresPod for X<T> { }
+
 fn main() { }
diff --git a/src/test/run-pass/kinds-in-metadata.rs b/src/test/run-pass/kinds-in-metadata.rs
new file mode 100644
index 00000000000..857cfccee9b
--- /dev/null
+++ b/src/test/run-pass/kinds-in-metadata.rs
@@ -0,0 +1,16 @@
+// xfail-fast
+// aux-build:kinds_in_metadata.rs
+
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Tests that metadata serialization works for the `Pod` kind.
+
+extern mod kinds_in_metadata;
+
+use kinds_in_metadata::f;
+
+pub fn main() {
+    f::<int>();
+}
+