From b982f08a66a76306bf0dae04d8ce053beeec059b Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Wed, 18 Dec 2013 15:03:32 -0800 Subject: [PATCH] librustc: Add missing case for the `Pod` bound in `tydecode`. --- src/librustc/metadata/tydecode.rs | 7 +++++-- src/test/auxiliary/kinds_in_metadata.rs | 9 +++++++++ .../auxiliary/trait_superkinds_in_metadata.rs | 1 + .../run-pass/builtin-superkinds-in-metadata.rs | 3 +++ src/test/run-pass/kinds-in-metadata.rs | 16 ++++++++++++++++ 5 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 src/test/auxiliary/kinds_in_metadata.rs create mode 100644 src/test/run-pass/kinds-in-metadata.rs 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() {} + 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); @@ -23,4 +24,6 @@ impl RequiresFreeze for X { } impl RequiresRequiresFreezeAndSend for X { } +impl RequiresPod for X { } + 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::(); +} +