diff options
18 files changed, 266 insertions, 239 deletions
diff --git a/Cargo.lock b/Cargo.lock index c4a25f18ba6..d7bedcf730a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -441,22 +441,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "compiletest_helper" -version = "0.0.1" -dependencies = [ - "compiletest_rs 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "compiletest_rs" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] name = "compositing" version = "0.0.1" dependencies = [ @@ -703,6 +687,13 @@ dependencies = [ ] [[package]] +name = "deny_public_fields_tests" +version = "0.0.1" +dependencies = [ + "deny_public_fields 0.0.1", +] + +[[package]] name = "device" version = "0.0.1" source = "git+https://github.com/servo/devices#c3b012b0ac4fbc47d1ebc9bd3fc308f599be4ee4" @@ -1738,6 +1729,14 @@ dependencies = [ ] [[package]] +name = "malloc_size_of_tests" +version = "0.0.1" +dependencies = [ + "malloc_size_of 0.0.1", + "servo_arc 0.0.1", +] + +[[package]] name = "markup5ever" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2359,16 +2358,6 @@ dependencies = [ ] [[package]] -name = "plugin_compiletest" -version = "0.0.1" -dependencies = [ - "compiletest_helper 0.0.1", - "deny_public_fields 0.0.1", - "script 0.0.1", - "script_plugins 0.0.1", -] - -[[package]] name = "png" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2729,6 +2718,13 @@ name = "script_plugins" version = "0.0.1" [[package]] +name = "script_plugins_tests" +version = "0.0.1" +dependencies = [ + "script_plugins 0.0.1", +] + +[[package]] name = "script_tests" version = "0.0.1" dependencies = [ @@ -2859,18 +2855,19 @@ dependencies = [ "android_injected_glue 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "backtrace 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "browserhtml 0.1.17 (git+https://github.com/browserhtml/browserhtml?branch=crate)", - "compiletest_helper 0.0.1", + "deny_public_fields_tests 0.0.1", "gfx_tests 0.0.1", "glutin_app 0.0.1", "layout_tests 0.0.1", "libservo 0.0.1", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "malloc_size_of_tests 0.0.1", "metrics_tests 0.0.1", "msg_tests 0.0.1", "net_tests 0.0.1", "net_traits_tests 0.0.1", - "plugin_compiletest 0.0.1", "profile_tests 0.0.1", + "script_plugins_tests 0.0.1", "script_tests 0.0.1", "servo_config_tests 0.0.1", "servo_remutex_tests 0.0.1", @@ -3896,7 +3893,6 @@ dependencies = [ "checksum coco 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c06169f5beb7e31c7c67ebf5540b8b472d23e3eade3b2ec7d1f5b504a85f91bd" "checksum cocoa 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac0d785ff4faf0ff23d7b5561346bb50dc7ef9a11cb0e65e07ef776b7752938f" "checksum color_quant 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a475fc4af42d83d28adf72968d9bcfaf035a1a9381642d8e85d8a04957767b0d" -"checksum compiletest_rs 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "617b23d0ed4f57b3bcff6b5fe0a78f0010f1efb636298317665a960b6dbc0533" "checksum cookie 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "30b3493e12a550c2f96be785088d1da8d93189e7237c8a8d0d871bc9070334c3" "checksum cookie 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "477eb650753e319be2ae77ec368a58c638f9f0c4d941c39bad95e950fb1d1d0d" "checksum core-foundation 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5909502e547762013619f4c4e01cc7393c20fe2d52d7fa471c1210adb2320dc7" diff --git a/etc/ci/buildbot_steps.yml b/etc/ci/buildbot_steps.yml index af0afc3d116..45dc2f39325 100644 --- a/etc/ci/buildbot_steps.yml +++ b/etc/ci/buildbot_steps.yml @@ -80,7 +80,6 @@ linux-dev: - ./mach test-tidy --no-progress --all - ./mach test-tidy --no-progress --self-test - env CC=gcc-5 CXX=g++-5 ./mach build --dev - - env ./mach test-compiletest - env ./mach test-unit - env ./mach package --dev - env ./mach build-cef diff --git a/ports/servo/Cargo.toml b/ports/servo/Cargo.toml index 4cd1b65037c..489b6f63515 100644 --- a/ports/servo/Cargo.toml +++ b/ports/servo/Cargo.toml @@ -14,16 +14,17 @@ test = false bench = false [dev-dependencies] -compiletest_helper = {path = "../../tests/compiletest/helper"} +deny_public_fields_tests = {path = "../../tests/unit/deny_public_fields"} gfx_tests = {path = "../../tests/unit/gfx"} layout_tests = {path = "../../tests/unit/layout"} +malloc_size_of_tests = {path = "../../tests/unit/malloc_size_of"} metrics_tests = {path = "../../tests/unit/metrics"} msg_tests = {path = "../../tests/unit/msg"} net_tests = {path = "../../tests/unit/net"} net_traits_tests = {path = "../../tests/unit/net_traits"} -plugin_compiletest = {path = "../../tests/compiletest/plugin"} profile_tests = {path = "../../tests/unit/profile"} script_tests = {path = "../../tests/unit/script"} +script_plugins_tests = {path = "../../tests/unit/script_plugins"} servo_config_tests = {path = "../../tests/unit/servo_config"} servo_remutex_tests = {path = "../../tests/unit/servo_remutex"} style_tests = {path = "../../tests/unit/style"} diff --git a/python/servo/testing_commands.py b/python/servo/testing_commands.py index 16efbd60b4f..a72b6ef8f70 100644 --- a/python/servo/testing_commands.py +++ b/python/servo/testing_commands.py @@ -59,9 +59,6 @@ TEST_SUITES = OrderedDict([ ("unit", {"kwargs": {}, "paths": [path.abspath(path.join("tests", "unit"))], "include_arg": "test_name"}), - ("compiletest", {"kwargs": {"release": False}, - "paths": [path.abspath(path.join("tests", "compiletest"))], - "include_arg": "test_name"}) ]) TEST_SUITES_BY_PREFIX = {path: k for k, v in TEST_SUITES.iteritems() if "paths" in v for path in v["paths"]} @@ -117,7 +114,6 @@ class MachCommands(CommandBase): "stylo": False} suites["wpt"]["kwargs"] = {"release": release} suites["unit"]["kwargs"] = {} - suites["compiletest"]["kwargs"] = {"release": release} selected_suites = OrderedDict() @@ -302,63 +298,6 @@ class MachCommands(CommandBase): with cd(path.join("ports", "geckolib")): return call(args, env=env) - @Command('test-compiletest', - description='Run compiletests', - category='testing') - @CommandArgument('--package', '-p', default=None, help="Specific package to test") - @CommandArgument('test_name', nargs=argparse.REMAINDER, - help="Only run tests that match this pattern or file path") - @CommandArgument('--release', default=False, action="store_true", - help="Run with a release build of servo") - def test_compiletest(self, test_name=None, package=None, release=False): - if test_name is None: - test_name = [] - - self.ensure_bootstrapped() - - if package: - packages = {package} - else: - packages = set() - - test_patterns = [] - for test in test_name: - # add package if 'tests/compiletest/<package>' - match = re.search("tests/compiletest/(\\w+)/?$", test) - if match: - packages.add(match.group(1)) - # add package & test if '<package>/<test>', 'tests/compiletest/<package>/<test>.rs', or similar - elif re.search("\\w/\\w", test): - tokens = test.split("/") - packages.add(tokens[-2]) - test_prefix = tokens[-1] - if test_prefix.endswith(".rs"): - test_prefix = test_prefix[:-3] - test_prefix += "::" - test_patterns.append(test_prefix) - # add test as-is otherwise - else: - test_patterns.append(test) - - if not packages: - packages = set(os.listdir(path.join(self.context.topdir, "tests", "compiletest"))) - set(['.DS_Store']) - - packages.remove("helper") - - args = ["cargo", "test"] - for crate in packages: - args += ["-p", "%s_compiletest" % crate] - args += test_patterns - - env = self.build_env() - if release: - env["BUILD_MODE"] = "release" - args += ["--release"] - else: - env["BUILD_MODE"] = "debug" - - return call(args, env=env, cwd=self.servo_crate()) - @Command('test-content', description='Run the content tests', category='testing') diff --git a/tests/compiletest/helper/lib.rs b/tests/compiletest/helper/lib.rs deleted file mode 100644 index 7c7b076c1bc..00000000000 --- a/tests/compiletest/helper/lib.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -extern crate compiletest_rs as compiletest; - -use std::env; -use std::path::PathBuf; - -pub fn run_mode(mode: &'static str) { - let mut config = compiletest::default_config(); - let cfg_mode = mode.parse().ok().expect("Invalid mode"); - - config.mode = cfg_mode; - config.src_base = PathBuf::from(format!("{}", mode)); - - let mut base_path = env::current_dir().expect("Current directory is invalid"); - base_path.pop(); - base_path.pop(); - base_path.pop(); - - let mode = env::var("BUILD_MODE").expect("BUILD_MODE environment variable must be set"); - let debug_path = base_path.join(PathBuf::from(format!("target/{}", mode))); - let deps_path = base_path.join(PathBuf::from(format!("target/{}/deps", mode))); - - config.target_rustcflags = Some(format!("-L {} -L {}", debug_path.display(), deps_path.display())); - compiletest::run_tests(&config); -} diff --git a/tests/compiletest/plugin/Cargo.toml b/tests/compiletest/plugin/Cargo.toml deleted file mode 100644 index cf5ba72cc44..00000000000 --- a/tests/compiletest/plugin/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "plugin_compiletest" -version = "0.0.1" -authors = ["The Servo Project Developers"] -license = "MPL-2.0" - -[lib] -name = "plugin_compiletest" -path = "lib.rs" -doctest = false - -[dependencies] -compiletest_helper = {path = "../helper"} -deny_public_fields = {path = "../../../components/deny_public_fields"} -script = {path = "../../../components/script"} -script_plugins = {path = "../../../components/script_plugins"} diff --git a/tests/compiletest/plugin/compile-fail/arc_rc_must_not_derive_malloc_size_of.rs b/tests/compiletest/plugin/compile-fail/arc_rc_must_not_derive_malloc_size_of.rs deleted file mode 100644 index 72a5eaa1e9c..00000000000 --- a/tests/compiletest/plugin/compile-fail/arc_rc_must_not_derive_malloc_size_of.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -extern crate malloc_size_of; -extern crate servo_arc; - -use malloc_size_of::{MallocShallowSizeOf, MallocSizeOf}; - -fn sizeable<T: MallocSizeOf>() { -} - -fn shallow_sizeable<T: MallocShallowSizeOf>() { -} - -fn main() { - sizeable::<::servo_arc::Arc<i32>>(); - //~^ ERROR the trait bound `servo_arc::Arc<i32>: malloc_size_of::MallocSizeOf` is not satisfied - - sizeable::<::std::sync::Arc<i32>>(); - //~^ ERROR the trait bound `std::sync::Arc<i32>: malloc_size_of::MallocSizeOf` is not satisfied - - sizeable::<::std::rc::Rc<i32>>(); - //~^ ERROR the trait bound `std::rc::Rc<i32>: malloc_size_of::MallocSizeOf` is not satisfied - - shallow_sizeable::<::servo_arc::Arc<i32>>(); - //~^ ERROR the trait bound `servo_arc::Arc<i32>: malloc_size_of::MallocShallowSizeOf` is not satisfied - - shallow_sizeable::<::std::sync::Arc<i32>>(); - //~^ ERROR the trait bound `std::sync::Arc<i32>: malloc_size_of::MallocShallowSizeOf` is not satisfied - - shallow_sizeable::<::std::rc::Rc<i32>>(); - //~^ ERROR the trait bound `std::rc::Rc<i32>: malloc_size_of::MallocShallowSizeOf` is not satisfied -} diff --git a/tests/compiletest/plugin/compile-fail/trustedpromise_mustnot_deriveclone.rs b/tests/compiletest/plugin/compile-fail/trustedpromise_mustnot_deriveclone.rs deleted file mode 100644 index 14ef7bbaa0d..00000000000 --- a/tests/compiletest/plugin/compile-fail/trustedpromise_mustnot_deriveclone.rs +++ /dev/null @@ -1,15 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -extern crate script; - -use script::test::TrustedPromise; - -fn cloneable<T: Clone>() { -} - -fn main() { - cloneable::<TrustedPromise>(); - //~^ ERROR the trait bound `script::test::TrustedPromise: std::clone::Clone` is not satisfied -} diff --git a/tests/compiletest/plugin/compile-fail/unrooted_must_root.rs b/tests/compiletest/plugin/compile-fail/unrooted_must_root.rs deleted file mode 100644 index 5fd1960d074..00000000000 --- a/tests/compiletest/plugin/compile-fail/unrooted_must_root.rs +++ /dev/null @@ -1,27 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#![allow(dead_code)] -#![feature(plugin)] -#![plugin(script_plugins)] - -#[must_root] -struct Foo { - v: i32 -} - -struct Bar { - f: Foo - //~^ ERROR Type must be rooted, use #[must_root] on the struct definition to propagate -} - -fn foo1(_: Foo) {} //~ ERROR Type must be rooted - - -fn foo2() -> Foo { //~ ERROR Type must be rooted - Foo { v: 10 } -} - - -fn main() {} diff --git a/tests/compiletest/plugin/lib.rs b/tests/compiletest/plugin/lib.rs deleted file mode 100644 index d3466c57b9b..00000000000 --- a/tests/compiletest/plugin/lib.rs +++ /dev/null @@ -1,10 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -extern crate compiletest_helper; - -#[test] -fn compile_test() { - compiletest_helper::run_mode("compile-fail"); -} diff --git a/tests/unit/deny_public_fields/Cargo.toml b/tests/unit/deny_public_fields/Cargo.toml new file mode 100644 index 00000000000..679069d2c1b --- /dev/null +++ b/tests/unit/deny_public_fields/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "deny_public_fields_tests" +version = "0.0.1" +authors = ["The Servo Project Developers"] +license = "MPL-2.0" + +[lib] +path = "lib.rs" +test = false + +[dependencies] +deny_public_fields = {path = "../../../components/deny_public_fields"} diff --git a/tests/compiletest/plugin/compile-fail/deny_public_fields.rs b/tests/unit/deny_public_fields/lib.rs index 622b2c20fe1..1fcb1314cf3 100644 --- a/tests/compiletest/plugin/compile-fail/deny_public_fields.rs +++ b/tests/unit/deny_public_fields/lib.rs @@ -2,17 +2,32 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#![allow(dead_code)] - -#[macro_use] -extern crate deny_public_fields; +/** +```compile_fail +#[macro_use] extern crate deny_public_fields; #[derive(DenyPublicFields)] -//~^ ERROR proc-macro derive panicked -//~| HELP Field `v1` should not be public struct Foo { pub v1: i32, v2: i32 } fn main() {} +``` +*/ +pub fn deny_public_fields_failing() {} + +/** +``` +#[macro_use] extern crate deny_public_fields; + +#[derive(DenyPublicFields)] +struct Foo { + v1: i32, + v2: i32 +} + +fn main() {} +``` +*/ +pub fn deny_public_fields_ok() {} diff --git a/tests/unit/malloc_size_of/Cargo.toml b/tests/unit/malloc_size_of/Cargo.toml new file mode 100644 index 00000000000..80668d5ba61 --- /dev/null +++ b/tests/unit/malloc_size_of/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "malloc_size_of_tests" +version = "0.0.1" +authors = ["The Servo Project Developers"] +license = "MPL-2.0" + +[lib] +path = "lib.rs" +test = false + +[dependencies] +malloc_size_of = {path = "../../../components/malloc_size_of"} +servo_arc = {path = "../../../components/servo_arc"} diff --git a/tests/unit/malloc_size_of/lib.rs b/tests/unit/malloc_size_of/lib.rs new file mode 100644 index 00000000000..8aae5a40310 --- /dev/null +++ b/tests/unit/malloc_size_of/lib.rs @@ -0,0 +1,109 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** +``` +extern crate malloc_size_of; +extern crate servo_arc; + +fn sizeable<T: malloc_size_of::MallocSizeOf>() {} +fn shallow_sizeable<T: malloc_size_of::MallocShallowSizeOf>() {} +fn cloneable<T: Clone>() {} + +fn main() { + cloneable::<servo_arc::Arc<i32>>(); + cloneable::<std::sync::Arc<i32>>(); + cloneable::<std::rc::Rc<i32>>(); +} +``` +*/ +pub fn imports_ok() {} + +pub mod does_not_impl_malloc_size_of { + /** + ```compile_fail,E0277 + extern crate malloc_size_of; + extern crate servo_arc; + + fn sizeable<T: malloc_size_of::MallocSizeOf>() {} + + fn main() { + sizeable::<servo_arc::Arc<i32>>(); + } + ``` + */ + pub fn servo_arc() {} + + + /** + ```compile_fail,E0277 + extern crate malloc_size_of; + + fn sizeable<T: malloc_size_of::MallocSizeOf>() {} + + fn main() { + sizeable::<std::sync::Arc<i32>>(); + } + ``` + */ + pub fn std_arc() {} + + + /** + ```compile_fail,E0277 + extern crate malloc_size_of; + + fn sizeable<T: malloc_size_of::MallocSizeOf>() {} + + fn main() { + sizeable::<std::rc::Rc<i32>>(); + } + ``` + */ + pub fn rc() {} +} + +pub mod does_not_impl_malloc_shallow_size_of { + /** + ```compile_fail,E0277 + extern crate malloc_size_of; + extern crate servo_arc; + + fn shallow_sizeable<T: malloc_size_of::MallocShallowSizeOf>() {} + + fn main() { + shallow_sizeable::<servo_arc::Arc<i32>>(); + } + ``` + */ + pub fn servo_arc() {} + + + /** + ```compile_fail,E0277 + extern crate malloc_size_of; + + fn shallow_sizeable<T: malloc_size_of::MallocShallowSizeOf>() {} + + fn main() { + shallow_sizeable::<std::sync::Arc<i32>>(); + } + ``` + */ + pub fn std_arc() {} + + + /** + ```compile_fail,E0277 + extern crate malloc_size_of; + + fn shallow_sizeable<T: malloc_size_of::MallocShallowSizeOf>() {} + + fn main() { + shallow_sizeable::<std::rc::Rc<i32>>(); + } + ``` + */ + pub fn rc() {} +} diff --git a/tests/unit/script/Cargo.toml b/tests/unit/script/Cargo.toml index 7785cced6a9..7983d119f38 100644 --- a/tests/unit/script/Cargo.toml +++ b/tests/unit/script/Cargo.toml @@ -7,7 +7,6 @@ license = "MPL-2.0" [lib] name = "script_tests" path = "lib.rs" -doctest = false [dependencies] euclid = "0.15" diff --git a/tests/unit/script/lib.rs b/tests/unit/script/lib.rs index 21b89a304c5..6d724db5358 100644 --- a/tests/unit/script/lib.rs +++ b/tests/unit/script/lib.rs @@ -2,11 +2,11 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -extern crate euclid; -extern crate msg; -extern crate script; -extern crate servo_url; -extern crate style; +#[cfg(test)] extern crate euclid; +#[cfg(test)] extern crate msg; +#[cfg(test)] extern crate script; +#[cfg(test)] extern crate servo_url; +#[cfg(test)] extern crate style; #[cfg(test)] mod origin; #[cfg(all(test, target_pointer_width = "64"))] mod size_of; @@ -15,3 +15,15 @@ extern crate style; #[cfg(test)] mod htmlareaelement; #[cfg(test)] mod htmlimageelement; +/** +```compile_fail,E0277 +extern crate script; + +fn cloneable<T: Clone>() {} + +fn main() { + cloneable::<script::test::TrustedPromise>(); +} +``` +*/ +pub fn trustedpromise_does_not_impl_clone() {} diff --git a/tests/compiletest/helper/Cargo.toml b/tests/unit/script_plugins/Cargo.toml index 01c5816668d..8a41b62aa8f 100644 --- a/tests/compiletest/helper/Cargo.toml +++ b/tests/unit/script_plugins/Cargo.toml @@ -1,13 +1,12 @@ [package] -name = "compiletest_helper" +name = "script_plugins_tests" version = "0.0.1" authors = ["The Servo Project Developers"] license = "MPL-2.0" [lib] -name = "compiletest_helper" path = "lib.rs" -doctest = false +test = false [dependencies] -compiletest_rs = "0.2.0" +script_plugins = {path = "../../../components/script_plugins"} diff --git a/tests/unit/script_plugins/lib.rs b/tests/unit/script_plugins/lib.rs new file mode 100644 index 00000000000..35a1c0dff11 --- /dev/null +++ b/tests/unit/script_plugins/lib.rs @@ -0,0 +1,63 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +pub mod unrooted_must_root { + /** + ``` + #![feature(plugin)] + #![plugin(script_plugins)] + + #[must_root] struct Foo(i32); + #[must_root] struct Bar(Foo); + + fn foo1(_: &Foo) {} + fn foo2(_: &()) -> &Foo { unimplemented!() } + + fn main() {} + ``` + */ + pub fn ok() {} + + /** + ```compile_fail + #![feature(plugin)] + #![plugin(script_plugins)] + + #[must_root] struct Foo(i32); + struct Bar(Foo); + + fn main() {} + ``` + */ + pub fn struct_field() {} + + /** + ```compile_fail + #![feature(plugin)] + #![plugin(script_plugins)] + + #[must_root] struct Foo(i32); + + fn foo1(_: Foo) {} + + fn main() {} + ``` + */ + pub fn parameter() {} + + /** + ```compile_fail + #![feature(plugin)] + #![plugin(script_plugins)] + + #[must_root] struct Foo(i32); + + fn foo2() -> Foo { unimplemented!() } + + fn main() {} + ``` + */ + pub fn return_type() {} + +} |