diff --git a/src/test/codegen-units/item-collection/aux/cgu_export_trait_method.rs b/src/test/codegen-units/item-collection/aux/cgu_export_trait_method.rs new file mode 100644 index 00000000000..49b8e43836e --- /dev/null +++ b/src/test/codegen-units/item-collection/aux/cgu_export_trait_method.rs @@ -0,0 +1,34 @@ +// Copyright 2012-2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +pub trait Trait : Sized { + fn without_self() -> u32; + fn without_self_default() -> u32 { 0 } + + fn with_default_impl(self) -> Self { self } + fn with_default_impl_generic(self, x: T) -> (Self, T) { (self, x) } + + fn without_default_impl(x: u32) -> (Self, u32); + fn without_default_impl_generic(x: T) -> (Self, T); +} + +impl Trait for char { + fn without_self() -> u32 { 2 } + fn without_default_impl(x: u32) -> (Self, u32) { ('c', x) } + fn without_default_impl_generic(x: T) -> (Self, T) { ('c', x) } +} + +impl Trait for u32 { + fn without_self() -> u32 { 1 } + fn without_default_impl(x: u32) -> (Self, u32) { (0, x) } + fn without_default_impl_generic(x: T) -> (Self, T) { (0, x) } +} diff --git a/src/test/codegen-units/item-collection/aux/cgu_extern_closures.rs b/src/test/codegen-units/item-collection/aux/cgu_extern_closures.rs new file mode 100644 index 00000000000..944d85db508 --- /dev/null +++ b/src/test/codegen-units/item-collection/aux/cgu_extern_closures.rs @@ -0,0 +1,33 @@ +// Copyright 2012-2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +#[inline] +pub fn inlined_fn(x: i32, y: i32) -> i32 { + + let closure = |a, b| { a + b }; + + closure(x, y) +} + +pub fn inlined_fn_generic(x: i32, y: i32, z: T) -> (i32, T) { + + let closure = |a, b| { a + b }; + + (closure(x, y), z) +} + +pub fn non_inlined_fn(x: i32, y: i32) -> i32 { + + let closure = |a, b| { a + b }; + + closure(x, y) +} diff --git a/src/test/codegen-units/item-collection/aux/cgu_generic_function.rs b/src/test/codegen-units/item-collection/aux/cgu_generic_function.rs new file mode 100644 index 00000000000..04c68748eca --- /dev/null +++ b/src/test/codegen-units/item-collection/aux/cgu_generic_function.rs @@ -0,0 +1,37 @@ +// Copyright 2012-2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +struct Struct(u32); + +#[inline(never)] +pub fn foo(x: T) -> (T, u32, i8) { + let (x, Struct(y)) = bar(x); + (x, y, 2) +} + +#[inline(never)] +fn bar(x: T) -> (T, Struct) { + let _ = not_exported_and_not_generic(0); + (x, Struct(1)) +} + +// These should not contribute to the codegen items of other crates. +#[inline(never)] +pub fn exported_but_not_generic(x: i32) -> i64 { + x as i64 +} + +#[inline(never)] +fn not_exported_and_not_generic(x: u32) -> u64 { + x as u64 +} + diff --git a/src/test/codegen-units/partitioning/aux/cgu_explicit_inlining.rs b/src/test/codegen-units/partitioning/aux/cgu_explicit_inlining.rs new file mode 100644 index 00000000000..e4ba9fae412 --- /dev/null +++ b/src/test/codegen-units/partitioning/aux/cgu_explicit_inlining.rs @@ -0,0 +1,20 @@ +// Copyright 2012-2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +#[inline] +pub fn inlined() {} + +#[inline(always)] +pub fn always_inlined() {} + +#[inline(never)] +pub fn never_inlined() {} diff --git a/src/test/codegen-units/partitioning/aux/cgu_extern_drop_glue.rs b/src/test/codegen-units/partitioning/aux/cgu_extern_drop_glue.rs new file mode 100644 index 00000000000..049bdb46579 --- /dev/null +++ b/src/test/codegen-units/partitioning/aux/cgu_extern_drop_glue.rs @@ -0,0 +1,17 @@ +// Copyright 2012-2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +pub struct Struct(pub u32); + +impl Drop for Struct { + fn drop(&mut self) {} +} diff --git a/src/test/codegen-units/partitioning/aux/cgu_generic_function.rs b/src/test/codegen-units/partitioning/aux/cgu_generic_function.rs new file mode 100644 index 00000000000..04c68748eca --- /dev/null +++ b/src/test/codegen-units/partitioning/aux/cgu_generic_function.rs @@ -0,0 +1,37 @@ +// Copyright 2012-2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +struct Struct(u32); + +#[inline(never)] +pub fn foo(x: T) -> (T, u32, i8) { + let (x, Struct(y)) = bar(x); + (x, y, 2) +} + +#[inline(never)] +fn bar(x: T) -> (T, Struct) { + let _ = not_exported_and_not_generic(0); + (x, Struct(1)) +} + +// These should not contribute to the codegen items of other crates. +#[inline(never)] +pub fn exported_but_not_generic(x: i32) -> i64 { + x as i64 +} + +#[inline(never)] +fn not_exported_and_not_generic(x: u32) -> u64 { + x as u64 +} + diff --git a/src/test/compile-fail-fulldeps/aux/attr_plugin_test.rs b/src/test/compile-fail-fulldeps/aux/attr_plugin_test.rs new file mode 100644 index 00000000000..bab3721a313 --- /dev/null +++ b/src/test/compile-fail-fulldeps/aux/attr_plugin_test.rs @@ -0,0 +1,31 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![feature(plugin_registrar)] +#![feature(rustc_private)] + +extern crate syntax; + +extern crate rustc; +extern crate rustc_plugin; + +use syntax::feature_gate::AttributeType; +use rustc_plugin::Registry; + + + +#[plugin_registrar] +pub fn plugin_registrar(reg: &mut Registry) { + reg.register_attribute("foo".to_owned(), AttributeType::Normal); + reg.register_attribute("bar".to_owned(), AttributeType::CrateLevel); + reg.register_attribute("baz".to_owned(), AttributeType::Whitelisted); +} diff --git a/src/test/compile-fail-fulldeps/aux/lint_for_crate.rs b/src/test/compile-fail-fulldeps/aux/lint_for_crate.rs new file mode 100644 index 00000000000..a424517da12 --- /dev/null +++ b/src/test/compile-fail-fulldeps/aux/lint_for_crate.rs @@ -0,0 +1,47 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![feature(plugin_registrar, rustc_private)] +#![feature(box_syntax)] + +#[macro_use] extern crate rustc; +extern crate rustc_plugin; +extern crate syntax; + +use rustc::lint::{LateContext, LintContext, LintPass, LateLintPass, LateLintPassObject, LintArray}; +use rustc_plugin::Registry; +use rustc::hir; +use syntax::attr; + +declare_lint!(CRATE_NOT_OKAY, Warn, "crate not marked with #![crate_okay]"); + +struct Pass; + +impl LintPass for Pass { + fn get_lints(&self) -> LintArray { + lint_array!(CRATE_NOT_OKAY) + } +} + +impl LateLintPass for Pass { + fn check_crate(&mut self, cx: &LateContext, krate: &hir::Crate) { + if !attr::contains_name(&krate.attrs, "crate_okay") { + cx.span_lint(CRATE_NOT_OKAY, krate.span, + "crate is not marked with #![crate_okay]"); + } + } +} + +#[plugin_registrar] +pub fn plugin_registrar(reg: &mut Registry) { + reg.register_late_lint_pass(box Pass as LateLintPassObject); +} diff --git a/src/test/compile-fail-fulldeps/aux/lint_group_plugin_test.rs b/src/test/compile-fail-fulldeps/aux/lint_group_plugin_test.rs new file mode 100644 index 00000000000..1e9a77724a8 --- /dev/null +++ b/src/test/compile-fail-fulldeps/aux/lint_group_plugin_test.rs @@ -0,0 +1,51 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![feature(plugin_registrar)] +#![feature(box_syntax, rustc_private)] + +// Load rustc as a plugin to get macros +#[macro_use] +extern crate rustc; +extern crate rustc_plugin; + +use rustc::hir; +use rustc::lint::{LateContext, LintContext, LintPass, LateLintPass, LateLintPassObject, LintArray}; +use rustc_plugin::Registry; + +declare_lint!(TEST_LINT, Warn, "Warn about items named 'lintme'"); + +declare_lint!(PLEASE_LINT, Warn, "Warn about items named 'pleaselintme'"); + +struct Pass; + +impl LintPass for Pass { + fn get_lints(&self) -> LintArray { + lint_array!(TEST_LINT, PLEASE_LINT) + } +} + +impl LateLintPass for Pass { + fn check_item(&mut self, cx: &LateContext, it: &hir::Item) { + match &*it.name.as_str() { + "lintme" => cx.span_lint(TEST_LINT, it.span, "item is named 'lintme'"), + "pleaselintme" => cx.span_lint(PLEASE_LINT, it.span, "item is named 'pleaselintme'"), + _ => {} + } + } +} + +#[plugin_registrar] +pub fn plugin_registrar(reg: &mut Registry) { + reg.register_late_lint_pass(box Pass as LateLintPassObject); + reg.register_lint_group("lint_me", vec![TEST_LINT, PLEASE_LINT]); +} diff --git a/src/test/compile-fail-fulldeps/aux/lint_plugin_test.rs b/src/test/compile-fail-fulldeps/aux/lint_plugin_test.rs new file mode 100644 index 00000000000..8ea131da338 --- /dev/null +++ b/src/test/compile-fail-fulldeps/aux/lint_plugin_test.rs @@ -0,0 +1,48 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![feature(plugin_registrar)] +#![feature(box_syntax, rustc_private)] + +extern crate syntax; + +// Load rustc as a plugin to get macros +#[macro_use] +extern crate rustc; +extern crate rustc_plugin; + +use rustc::lint::{EarlyContext, LintContext, LintPass, EarlyLintPass, + EarlyLintPassObject, LintArray}; +use rustc_plugin::Registry; +use syntax::ast; +declare_lint!(TEST_LINT, Warn, "Warn about items named 'lintme'"); + +struct Pass; + +impl LintPass for Pass { + fn get_lints(&self) -> LintArray { + lint_array!(TEST_LINT) + } +} + +impl EarlyLintPass for Pass { + fn check_item(&mut self, cx: &EarlyContext, it: &ast::Item) { + if it.ident.name.as_str() == "lintme" { + cx.span_lint(TEST_LINT, it.span, "item is named 'lintme'"); + } + } +} + +#[plugin_registrar] +pub fn plugin_registrar(reg: &mut Registry) { + reg.register_early_lint_pass(box Pass as EarlyLintPassObject); +} diff --git a/src/test/compile-fail-fulldeps/aux/macro_crate_MacroRulesTT.rs b/src/test/compile-fail-fulldeps/aux/macro_crate_MacroRulesTT.rs new file mode 100644 index 00000000000..9e693fcc564 --- /dev/null +++ b/src/test/compile-fail-fulldeps/aux/macro_crate_MacroRulesTT.rs @@ -0,0 +1,26 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![feature(plugin_registrar, rustc_private)] + +extern crate syntax; +extern crate rustc; +extern crate rustc_plugin; + +use syntax::parse::token; +use syntax::ext::base::MacroRulesTT; +use rustc_plugin::Registry; + +#[plugin_registrar] +pub fn plugin_registrar(reg: &mut Registry) { + reg.register_syntax_extension(token::intern("bogus"), MacroRulesTT); +} diff --git a/src/test/compile-fail-fulldeps/aux/macro_crate_test.rs b/src/test/compile-fail-fulldeps/aux/macro_crate_test.rs new file mode 100644 index 00000000000..3516f566e8a --- /dev/null +++ b/src/test/compile-fail-fulldeps/aux/macro_crate_test.rs @@ -0,0 +1,141 @@ +// Copyright 2013-2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![feature(plugin_registrar, quote, rustc_private)] + +extern crate syntax; +extern crate rustc; +extern crate rustc_plugin; + +use syntax::ast::{self, TokenTree, Item, MetaItem, ImplItem, TraitItem, ItemKind}; +use syntax::codemap::Span; +use syntax::ext::base::*; +use syntax::parse::{self, token}; +use syntax::ptr::P; +use rustc_plugin::Registry; + +#[macro_export] +macro_rules! exported_macro { () => (2) } +macro_rules! unexported_macro { () => (3) } + +#[plugin_registrar] +pub fn plugin_registrar(reg: &mut Registry) { + reg.register_macro("make_a_1", expand_make_a_1); + reg.register_macro("identity", expand_identity); + reg.register_syntax_extension( + token::intern("into_multi_foo"), + // FIXME (#22405): Replace `Box::new` with `box` here when/if possible. + MultiModifier(Box::new(expand_into_foo_multi))); + reg.register_syntax_extension( + token::intern("duplicate"), + // FIXME (#22405): Replace `Box::new` with `box` here when/if possible. + MultiDecorator(Box::new(expand_duplicate))); +} + +fn expand_make_a_1(cx: &mut ExtCtxt, sp: Span, tts: &[TokenTree]) + -> Box { + if !tts.is_empty() { + cx.span_fatal(sp, "make_a_1 takes no arguments"); + } + MacEager::expr(quote_expr!(cx, 1)) +} + +// See Issue #15750 +fn expand_identity(cx: &mut ExtCtxt, _span: Span, tts: &[TokenTree]) + -> Box { + // Parse an expression and emit it unchanged. + let mut parser = parse::new_parser_from_tts(cx.parse_sess(), + cx.cfg(), tts.to_vec()); + let expr = parser.parse_expr().unwrap(); + MacEager::expr(quote_expr!(&mut *cx, $expr)) +} + +fn expand_into_foo_multi(cx: &mut ExtCtxt, + sp: Span, + attr: &MetaItem, + it: Annotatable) -> Annotatable { + match it { + Annotatable::Item(it) => { + Annotatable::Item(P(Item { + attrs: it.attrs.clone(), + ..(*quote_item!(cx, enum Foo2 { Bar2, Baz2 }).unwrap()).clone() + })) + } + Annotatable::ImplItem(it) => { + quote_item!(cx, impl X { fn foo(&self) -> i32 { 42 } }).unwrap().and_then(|i| { + match i.node { + ItemKind::Impl(_, _, _, _, _, mut items) => { + Annotatable::ImplItem(P(items.pop().expect("impl method not found"))) + } + _ => unreachable!("impl parsed to something other than impl") + } + }) + } + Annotatable::TraitItem(it) => { + quote_item!(cx, trait X { fn foo(&self) -> i32 { 0 } }).unwrap().and_then(|i| { + match i.node { + ItemKind::Trait(_, _, _, mut items) => { + Annotatable::TraitItem(P(items.pop().expect("trait method not found"))) + } + _ => unreachable!("trait parsed to something other than trait") + } + }) + } + } +} + +// Create a duplicate of the annotatable, based on the MetaItem +fn expand_duplicate(cx: &mut ExtCtxt, + sp: Span, + mi: &MetaItem, + it: &Annotatable, + push: &mut FnMut(Annotatable)) +{ + let copy_name = match mi.node { + ast::MetaItemKind::List(_, ref xs) => { + if let ast::MetaItemKind::Word(ref w) = xs[0].node { + token::str_to_ident(&w) + } else { + cx.span_err(mi.span, "Expected word"); + return; + } + } + _ => { + cx.span_err(mi.span, "Expected list"); + return; + } + }; + + // Duplicate the item but replace its ident by the MetaItem + match it.clone() { + Annotatable::Item(it) => { + let mut new_it = (*it).clone(); + new_it.attrs.clear(); + new_it.ident = copy_name; + push(Annotatable::Item(P(new_it))); + } + Annotatable::ImplItem(it) => { + let mut new_it = (*it).clone(); + new_it.attrs.clear(); + new_it.ident = copy_name; + push(Annotatable::ImplItem(P(new_it))); + } + Annotatable::TraitItem(tt) => { + let mut new_it = (*tt).clone(); + new_it.attrs.clear(); + new_it.ident = copy_name; + push(Annotatable::TraitItem(P(new_it))); + } + } +} + +pub fn foo() {} diff --git a/src/test/compile-fail-fulldeps/aux/macro_reexport_1.rs b/src/test/compile-fail-fulldeps/aux/macro_reexport_1.rs new file mode 100644 index 00000000000..aaeccc6e898 --- /dev/null +++ b/src/test/compile-fail-fulldeps/aux/macro_reexport_1.rs @@ -0,0 +1,15 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "dylib"] +#[macro_export] +macro_rules! reexported { + () => ( 3 ) +} diff --git a/src/test/compile-fail-fulldeps/aux/rlib_crate_test.rs b/src/test/compile-fail-fulldeps/aux/rlib_crate_test.rs new file mode 100644 index 00000000000..ae1568b2f88 --- /dev/null +++ b/src/test/compile-fail-fulldeps/aux/rlib_crate_test.rs @@ -0,0 +1,22 @@ +// Copyright 2013-2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +#![crate_type = "rlib"] +#![feature(plugin_registrar, rustc_private)] + +extern crate rustc; +extern crate rustc_plugin; + +use rustc_plugin::Registry; + +#[plugin_registrar] +pub fn plugin_registrar(_: &mut Registry) {} diff --git a/src/test/compile-fail-fulldeps/aux/use_from_trait_xc.rs b/src/test/compile-fail-fulldeps/aux/use_from_trait_xc.rs new file mode 100644 index 00000000000..7024c9dad7c --- /dev/null +++ b/src/test/compile-fail-fulldeps/aux/use_from_trait_xc.rs @@ -0,0 +1,41 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(associated_consts)] + +pub use self::sub::{Bar, Baz}; + +pub trait Trait { + fn foo(&self); + type Assoc; + const CONST: u32; +} + +struct Foo; + +impl Foo { + pub fn new() {} + + pub const C: u32 = 0; +} + +mod sub { + pub struct Bar; + + impl Bar { + pub fn new() {} + } + + pub enum Baz {} + + impl Baz { + pub fn new() {} + } +} diff --git a/src/test/compile-fail/aux/allocator-dylib.rs b/src/test/compile-fail/aux/allocator-dylib.rs new file mode 100644 index 00000000000..568b247ecdb --- /dev/null +++ b/src/test/compile-fail/aux/allocator-dylib.rs @@ -0,0 +1,15 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +#![crate_type = "dylib"] + +pub fn foo() {} diff --git a/src/test/compile-fail/aux/allocator-dylib2.rs b/src/test/compile-fail/aux/allocator-dylib2.rs new file mode 100644 index 00000000000..0d76c0e5eb8 --- /dev/null +++ b/src/test/compile-fail/aux/allocator-dylib2.rs @@ -0,0 +1,12 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn foo() {} + diff --git a/src/test/compile-fail/aux/allocator1.rs b/src/test/compile-fail/aux/allocator1.rs new file mode 100644 index 00000000000..b24784838d0 --- /dev/null +++ b/src/test/compile-fail/aux/allocator1.rs @@ -0,0 +1,16 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +#![feature(allocator)] +#![allocator] +#![crate_type = "rlib"] +#![no_std] diff --git a/src/test/compile-fail/aux/allocator2.rs b/src/test/compile-fail/aux/allocator2.rs new file mode 100644 index 00000000000..b24784838d0 --- /dev/null +++ b/src/test/compile-fail/aux/allocator2.rs @@ -0,0 +1,16 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +#![feature(allocator)] +#![allocator] +#![crate_type = "rlib"] +#![no_std] diff --git a/src/test/compile-fail/aux/allocator3.rs b/src/test/compile-fail/aux/allocator3.rs new file mode 100644 index 00000000000..d3eb1f6f7ab --- /dev/null +++ b/src/test/compile-fail/aux/allocator3.rs @@ -0,0 +1,19 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +#![feature(allocator)] +#![no_std] +#![allocator] +#![crate_type = "rlib"] + +extern crate needs_allocator; + diff --git a/src/test/compile-fail/aux/ambig_impl_2_lib.rs b/src/test/compile-fail/aux/ambig_impl_2_lib.rs new file mode 100644 index 00000000000..4ba0ccdba9b --- /dev/null +++ b/src/test/compile-fail/aux/ambig_impl_2_lib.rs @@ -0,0 +1,14 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub trait me { + fn me(&self) -> usize; +} +impl me for usize { fn me(&self) -> usize { *self } } diff --git a/src/test/compile-fail/aux/cci_class.rs b/src/test/compile-fail/aux/cci_class.rs new file mode 100644 index 00000000000..08a13fd8bcc --- /dev/null +++ b/src/test/compile-fail/aux/cci_class.rs @@ -0,0 +1,24 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub mod kitties { + pub struct cat { + meows : usize, + + pub how_hungry : isize, + } + + pub fn cat(in_x : usize, in_y : isize) -> cat { + cat { + meows: in_x, + how_hungry: in_y + } + } +} diff --git a/src/test/compile-fail/aux/cci_class_5.rs b/src/test/compile-fail/aux/cci_class_5.rs new file mode 100644 index 00000000000..7fe608f1634 --- /dev/null +++ b/src/test/compile-fail/aux/cci_class_5.rs @@ -0,0 +1,27 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub mod kitties { + pub struct cat { + meows : usize, + pub how_hungry : isize, + } + + impl cat { + fn nap(&self) {} + } + + pub fn cat(in_x : usize, in_y : isize) -> cat { + cat { + meows: in_x, + how_hungry: in_y + } + } +} diff --git a/src/test/compile-fail/aux/changing-crates-a1.rs b/src/test/compile-fail/aux/changing-crates-a1.rs new file mode 100644 index 00000000000..18162c5f756 --- /dev/null +++ b/src/test/compile-fail/aux/changing-crates-a1.rs @@ -0,0 +1,13 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name = "a"] + +pub fn foo() {} diff --git a/src/test/compile-fail/aux/changing-crates-a2.rs b/src/test/compile-fail/aux/changing-crates-a2.rs new file mode 100644 index 00000000000..28eae023d68 --- /dev/null +++ b/src/test/compile-fail/aux/changing-crates-a2.rs @@ -0,0 +1,13 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name = "a"] + +pub fn foo() { println!("hello!"); } diff --git a/src/test/compile-fail/aux/changing-crates-b.rs b/src/test/compile-fail/aux/changing-crates-b.rs new file mode 100644 index 00000000000..7b1190fc085 --- /dev/null +++ b/src/test/compile-fail/aux/changing-crates-b.rs @@ -0,0 +1,15 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name = "b"] + +extern crate a; + +pub fn foo() { a::foo::(); } diff --git a/src/test/compile-fail/aux/coherence_copy_like_lib.rs b/src/test/compile-fail/aux/coherence_copy_like_lib.rs new file mode 100644 index 00000000000..d3d389c6a8b --- /dev/null +++ b/src/test/compile-fail/aux/coherence_copy_like_lib.rs @@ -0,0 +1,20 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "rlib"] +#![feature(fundamental)] + +pub trait MyCopy { } +impl MyCopy for i32 { } + +pub struct MyStruct(T); + +#[fundamental] +pub struct MyFundamentalStruct(T); diff --git a/src/test/compile-fail/aux/coherence_inherent_cc_lib.rs b/src/test/compile-fail/aux/coherence_inherent_cc_lib.rs new file mode 100644 index 00000000000..0458636a401 --- /dev/null +++ b/src/test/compile-fail/aux/coherence_inherent_cc_lib.rs @@ -0,0 +1,21 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// See coherence_inherent_cc.rs + +pub trait TheTrait { + fn the_fn(&self); +} + +pub struct TheStruct; + +impl TheTrait for TheStruct { + fn the_fn(&self) {} +} diff --git a/src/test/compile-fail/aux/coherence_lib.rs b/src/test/compile-fail/aux/coherence_lib.rs new file mode 100644 index 00000000000..daa123849e4 --- /dev/null +++ b/src/test/compile-fail/aux/coherence_lib.rs @@ -0,0 +1,25 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] + +pub trait Remote { + fn foo(&self) { } +} + +pub trait Remote1 { + fn foo(&self, t: T) { } +} + +pub trait Remote2 { + fn foo(&self, t: T, u: U) { } +} + +pub struct Pair(T,U); diff --git a/src/test/compile-fail/aux/coherence_orphan_lib.rs b/src/test/compile-fail/aux/coherence_orphan_lib.rs new file mode 100644 index 00000000000..b22d12300c7 --- /dev/null +++ b/src/test/compile-fail/aux/coherence_orphan_lib.rs @@ -0,0 +1,13 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub trait TheTrait { + fn the_fn(&self); +} diff --git a/src/test/compile-fail/aux/const_fn_lib.rs b/src/test/compile-fail/aux/const_fn_lib.rs new file mode 100644 index 00000000000..b0d5a6b1272 --- /dev/null +++ b/src/test/compile-fail/aux/const_fn_lib.rs @@ -0,0 +1,16 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Crate that exports a const fn. Used for testing cross-crate. + +#![crate_type="rlib"] +#![feature(const_fn)] + +pub const fn foo() -> usize { 22 } //~ ERROR const fn is unstable diff --git a/src/test/compile-fail/aux/crate_a1.rs b/src/test/compile-fail/aux/crate_a1.rs new file mode 100644 index 00000000000..70f7cac94de --- /dev/null +++ b/src/test/compile-fail/aux/crate_a1.rs @@ -0,0 +1,21 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct Foo; + +pub trait Bar{} + +pub fn bar() -> Box { + unimplemented!() +} + + +pub fn try_foo(x: Foo){} +pub fn try_bar(x: Box){} diff --git a/src/test/compile-fail/aux/crate_a2.rs b/src/test/compile-fail/aux/crate_a2.rs new file mode 100644 index 00000000000..d801f25ba2e --- /dev/null +++ b/src/test/compile-fail/aux/crate_a2.rs @@ -0,0 +1,17 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct Foo; + +pub trait Bar{} + +pub fn bar() -> Box { + unimplemented!() +} diff --git a/src/test/compile-fail/aux/crateresolve1-1.rs b/src/test/compile-fail/aux/crateresolve1-1.rs new file mode 100644 index 00000000000..050f2fe7329 --- /dev/null +++ b/src/test/compile-fail/aux/crateresolve1-1.rs @@ -0,0 +1,15 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags:-C extra-filename=-1 +#![crate_name = "crateresolve1"] +#![crate_type = "lib"] + +pub fn f() -> isize { 10 } diff --git a/src/test/compile-fail/aux/crateresolve1-2.rs b/src/test/compile-fail/aux/crateresolve1-2.rs new file mode 100644 index 00000000000..d19b3bafba5 --- /dev/null +++ b/src/test/compile-fail/aux/crateresolve1-2.rs @@ -0,0 +1,15 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags:-C extra-filename=-2 +#![crate_name = "crateresolve1"] +#![crate_type = "lib"] + +pub fn f() -> isize { 20 } diff --git a/src/test/compile-fail/aux/crateresolve1-3.rs b/src/test/compile-fail/aux/crateresolve1-3.rs new file mode 100644 index 00000000000..c5096ac49a8 --- /dev/null +++ b/src/test/compile-fail/aux/crateresolve1-3.rs @@ -0,0 +1,15 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags:-C extra-filename=-3 +#![crate_name = "crateresolve1"] +#![crate_type = "lib"] + +pub fn f() -> isize { 30 } diff --git a/src/test/compile-fail/aux/default_ty_param_cross_crate_crate.rs b/src/test/compile-fail/aux/default_ty_param_cross_crate_crate.rs new file mode 100644 index 00000000000..4bd8ecacb96 --- /dev/null +++ b/src/test/compile-fail/aux/default_ty_param_cross_crate_crate.rs @@ -0,0 +1,20 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] +#![crate_name = "default_param_test"] +#![feature(default_type_parameter_fallback)] + +use std::marker::PhantomData; + +pub struct Foo(PhantomData<(A, B)>); + +pub fn bleh() -> Foo { Foo(PhantomData) } + diff --git a/src/test/compile-fail/aux/deprecation-lint.rs b/src/test/compile-fail/aux/deprecation-lint.rs new file mode 100644 index 00000000000..ff872efb7bd --- /dev/null +++ b/src/test/compile-fail/aux/deprecation-lint.rs @@ -0,0 +1,90 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(deprecated)] + +#[deprecated(since = "1.0.0", note = "text")] +pub fn deprecated() {} +#[deprecated(since = "1.0.0", note = "text")] +pub fn deprecated_text() {} + +pub struct MethodTester; + +impl MethodTester { + #[deprecated(since = "1.0.0", note = "text")] + pub fn method_deprecated(&self) {} + #[deprecated(since = "1.0.0", note = "text")] + pub fn method_deprecated_text(&self) {} +} + +pub trait Trait { + #[deprecated(since = "1.0.0", note = "text")] + fn trait_deprecated(&self) {} + #[deprecated(since = "1.0.0", note = "text")] + fn trait_deprecated_text(&self) {} +} + +#[deprecated(since = "1.0.0", note = "text")] +pub trait DeprecatedTrait { fn dummy(&self) { } } + +impl Trait for MethodTester {} + +#[deprecated(since = "1.0.0", note = "text")] +pub struct DeprecatedStruct { + pub i: isize +} + +#[deprecated(since = "1.0.0", note = "text")] +pub struct DeprecatedUnitStruct; + +pub enum Enum { + #[deprecated(since = "1.0.0", note = "text")] + DeprecatedVariant, +} + +#[deprecated(since = "1.0.0", note = "text")] +pub struct DeprecatedTupleStruct(pub isize); + +pub struct Stable { + #[deprecated(since = "1.0.0", note = "text")] + pub override2: u8, +} + +pub struct Stable2(pub u8, pub u8, #[deprecated(since = "1.0.0", note = "text")] pub u8); + +#[deprecated(since = "1.0.0", note = "text")] +pub struct Deprecated { + pub inherit: u8, +} + +#[deprecated(since = "1.0.0", note = "text")] +pub struct Deprecated2(pub u8, + pub u8, + pub u8); + +#[deprecated(since = "1.0.0", note = "text")] +pub mod deprecated_mod { + pub fn deprecated() {} +} + +#[macro_export] +macro_rules! macro_test { + () => (deprecated()); +} + +#[macro_export] +macro_rules! macro_test_arg { + ($func:expr) => ($func); +} + +#[macro_export] +macro_rules! macro_test_arg_nested { + ($func:ident) => (macro_test_arg!($func())); +} diff --git a/src/test/compile-fail/aux/empty-struct.rs b/src/test/compile-fail/aux/empty-struct.rs new file mode 100644 index 00000000000..22f65c2b0d8 --- /dev/null +++ b/src/test/compile-fail/aux/empty-struct.rs @@ -0,0 +1,17 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct XEmpty1 {} +pub struct XEmpty2; + +pub enum XE { + XEmpty3 {}, + XEmpty4, +} diff --git a/src/test/compile-fail/aux/go_trait.rs b/src/test/compile-fail/aux/go_trait.rs new file mode 100644 index 00000000000..044bb606b40 --- /dev/null +++ b/src/test/compile-fail/aux/go_trait.rs @@ -0,0 +1,53 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(specialization)] + +// Common code used for tests that model the Fn/FnMut/FnOnce hierarchy. + +pub trait Go { + fn go(&self, arg: isize); +} + +pub fn go(this: &G, arg: isize) { + this.go(arg) +} + +pub trait GoMut { + fn go_mut(&mut self, arg: isize); +} + +pub fn go_mut(this: &mut G, arg: isize) { + this.go_mut(arg) +} + +pub trait GoOnce { + fn go_once(self, arg: isize); +} + +pub fn go_once(this: G, arg: isize) { + this.go_once(arg) +} + +impl GoMut for G + where G : Go +{ + default fn go_mut(&mut self, arg: isize) { + go(&*self, arg) + } +} + +impl GoOnce for G + where G : GoMut +{ + default fn go_once(mut self, arg: isize) { + go_mut(&mut self, arg) + } +} diff --git a/src/test/compile-fail/aux/inherited_stability.rs b/src/test/compile-fail/aux/inherited_stability.rs new file mode 100644 index 00000000000..0b1aee68f44 --- /dev/null +++ b/src/test/compile-fail/aux/inherited_stability.rs @@ -0,0 +1,56 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. +#![crate_name="inherited_stability"] +#![crate_type = "lib"] +#![unstable(feature = "test_feature", issue = "0")] +#![feature(staged_api)] + +pub fn unstable() {} + +#[stable(feature = "rust1", since = "1.0.0")] +pub fn stable() {} + +#[stable(feature = "rust1", since = "1.0.0")] +pub mod stable_mod { + #[unstable(feature = "test_feature", issue = "0")] + pub fn unstable() {} + + #[stable(feature = "rust1", since = "1.0.0")] + pub fn stable() {} +} + +#[unstable(feature = "test_feature", issue = "0")] +pub mod unstable_mod { + #[stable(feature = "test_feature", since = "1.0.0")] + #[rustc_deprecated(since = "1.0.0", reason = "text")] + pub fn deprecated() {} + + pub fn unstable() {} +} + +#[stable(feature = "rust1", since = "1.0.0")] +pub trait Stable { + #[unstable(feature = "test_feature", issue = "0")] + fn unstable(&self); + + #[stable(feature = "rust1", since = "1.0.0")] + fn stable(&self); +} + +impl Stable for usize { + fn unstable(&self) {} + fn stable(&self) {} +} + +pub enum Unstable { + UnstableVariant, + #[stable(feature = "rust1", since = "1.0.0")] + StableVariant +} diff --git a/src/test/compile-fail/aux/internal_unstable.rs b/src/test/compile-fail/aux/internal_unstable.rs new file mode 100644 index 00000000000..a4cd487eb65 --- /dev/null +++ b/src/test/compile-fail/aux/internal_unstable.rs @@ -0,0 +1,102 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(staged_api, allow_internal_unstable)] +#![stable(feature = "stable", since = "1.0.0")] + +#[unstable(feature = "function", issue = "0")] +pub fn unstable() {} + + +#[stable(feature = "stable", since = "1.0.0")] +pub struct Foo { + #[unstable(feature = "struct_field", issue = "0")] + pub x: u8 +} + +impl Foo { + #[unstable(feature = "method", issue = "0")] + pub fn method(&self) {} +} + +#[stable(feature = "stable", since = "1.0.0")] +pub struct Bar { + #[unstable(feature = "struct2_field", issue = "0")] + pub x: u8 +} + +#[stable(feature = "stable", since = "1.0.0")] +#[allow_internal_unstable] +#[macro_export] +macro_rules! call_unstable_allow { + () => { $crate::unstable() } +} + +#[stable(feature = "stable", since = "1.0.0")] +#[allow_internal_unstable] +#[macro_export] +macro_rules! construct_unstable_allow { + ($e: expr) => { + $crate::Foo { x: $e } + } +} + +#[stable(feature = "stable", since = "1.0.0")] +#[allow_internal_unstable] +#[macro_export] +macro_rules! call_method_allow { + ($e: expr) => { $e.method() } +} + +#[stable(feature = "stable", since = "1.0.0")] +#[allow_internal_unstable] +#[macro_export] +macro_rules! access_field_allow { + ($e: expr) => { $e.x } +} + +#[stable(feature = "stable", since = "1.0.0")] +#[allow_internal_unstable] +#[macro_export] +macro_rules! pass_through_allow { + ($e: expr) => { $e } +} + +#[stable(feature = "stable", since = "1.0.0")] +#[macro_export] +macro_rules! call_unstable_noallow { + () => { $crate::unstable() } +} + +#[stable(feature = "stable", since = "1.0.0")] +#[macro_export] +macro_rules! construct_unstable_noallow { + ($e: expr) => { + $crate::Foo { x: $e } + } +} + +#[stable(feature = "stable", since = "1.0.0")] +#[macro_export] +macro_rules! call_method_noallow { + ($e: expr) => { $e.method() } +} + +#[stable(feature = "stable", since = "1.0.0")] +#[macro_export] +macro_rules! access_field_noallow { + ($e: expr) => { $e.x } +} + +#[stable(feature = "stable", since = "1.0.0")] +#[macro_export] +macro_rules! pass_through_noallow { + ($e: expr) => { $e } +} diff --git a/src/test/compile-fail/aux/issue-19163.rs b/src/test/compile-fail/aux/issue-19163.rs new file mode 100644 index 00000000000..76c5cdafd7c --- /dev/null +++ b/src/test/compile-fail/aux/issue-19163.rs @@ -0,0 +1,16 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +#[macro_export] +macro_rules! mywrite { + ($dst:expr, $($arg:tt)*) => ($dst.write_fmt(format_args!($($arg)*))) +} diff --git a/src/test/compile-fail/aux/issue-21221-3.rs b/src/test/compile-fail/aux/issue-21221-3.rs new file mode 100644 index 00000000000..fae0fe16a26 --- /dev/null +++ b/src/test/compile-fail/aux/issue-21221-3.rs @@ -0,0 +1,29 @@ +// Copyright 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// testing whether the lookup mechanism picks up types +// defined in the outside crate + +#![crate_type="lib"] + +pub mod outer { + // should suggest this + pub trait OuterTrait {} + + // should not suggest this since the module is private + mod private_module { + pub trait OuterTrait {} + } + + // should not suggest since the trait is private + pub mod public_module { + trait OuterTrait {} + } +} diff --git a/src/test/compile-fail/aux/issue-21221-4.rs b/src/test/compile-fail/aux/issue-21221-4.rs new file mode 100644 index 00000000000..fffe060ee24 --- /dev/null +++ b/src/test/compile-fail/aux/issue-21221-4.rs @@ -0,0 +1,22 @@ +// Copyright 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// testing whether the lookup mechanism picks up types +// defined in the outside crate + +#![crate_type="lib"] + +mod foo { + // should not be suggested => foo is private + pub trait T {} +} + +// should be suggested +pub use foo::T; diff --git a/src/test/compile-fail/aux/issue-29181.rs b/src/test/compile-fail/aux/issue-29181.rs new file mode 100644 index 00000000000..361f1ea5509 --- /dev/null +++ b/src/test/compile-fail/aux/issue-29181.rs @@ -0,0 +1,15 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] + +pub mod foo { + pub use super::*; +} diff --git a/src/test/compile-fail/aux/issue-30535.rs b/src/test/compile-fail/aux/issue-30535.rs new file mode 100644 index 00000000000..8d44e8d1016 --- /dev/null +++ b/src/test/compile-fail/aux/issue-30535.rs @@ -0,0 +1,15 @@ +// Copyright 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] + +pub enum Foo { + FooV { data: () } +} diff --git a/src/test/compile-fail/aux/issue_11680.rs b/src/test/compile-fail/aux/issue_11680.rs new file mode 100644 index 00000000000..18f78750b15 --- /dev/null +++ b/src/test/compile-fail/aux/issue_11680.rs @@ -0,0 +1,19 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +enum Foo { + Bar(isize) +} + +pub mod test { + enum Foo { + Bar(isize) + } +} diff --git a/src/test/compile-fail/aux/issue_12612_1.rs b/src/test/compile-fail/aux/issue_12612_1.rs new file mode 100644 index 00000000000..a0234c1185a --- /dev/null +++ b/src/test/compile-fail/aux/issue_12612_1.rs @@ -0,0 +1,13 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub mod bar { + pub fn foo() {} +} diff --git a/src/test/compile-fail/aux/issue_16725.rs b/src/test/compile-fail/aux/issue_16725.rs new file mode 100644 index 00000000000..b3b04b4a5ac --- /dev/null +++ b/src/test/compile-fail/aux/issue_16725.rs @@ -0,0 +1,13 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +extern { + fn bar(); +} diff --git a/src/test/compile-fail/aux/issue_17718_const_privacy.rs b/src/test/compile-fail/aux/issue_17718_const_privacy.rs new file mode 100644 index 00000000000..3901d73382f --- /dev/null +++ b/src/test/compile-fail/aux/issue_17718_const_privacy.rs @@ -0,0 +1,18 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub use foo::FOO2; + +pub const FOO: usize = 3; +const BAR: usize = 3; + +mod foo { + pub const FOO2: usize = 3; +} diff --git a/src/test/compile-fail/aux/issue_21202.rs b/src/test/compile-fail/aux/issue_21202.rs new file mode 100644 index 00000000000..afdbf78aa82 --- /dev/null +++ b/src/test/compile-fail/aux/issue_21202.rs @@ -0,0 +1,16 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub mod A { + pub struct Foo; + impl Foo { + fn foo(&self) { } + } +} diff --git a/src/test/compile-fail/aux/issue_30123_aux.rs b/src/test/compile-fail/aux/issue_30123_aux.rs new file mode 100644 index 00000000000..f60311a9400 --- /dev/null +++ b/src/test/compile-fail/aux/issue_30123_aux.rs @@ -0,0 +1,33 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use std::marker::PhantomData; + +pub struct Directed; +pub struct Undirected; + +pub struct Graph { + nodes: Vec>, + edges: Vec>, + ty: PhantomData, +} + + +impl Graph { + pub fn new() -> Self { + Graph{nodes: Vec::new(), edges: Vec::new(), ty: PhantomData} + } +} + +impl Graph { + pub fn new_undirected() -> Self { + Graph{nodes: Vec::new(), edges: Vec::new(), ty: PhantomData} + } +} diff --git a/src/test/compile-fail/aux/issue_3907.rs b/src/test/compile-fail/aux/issue_3907.rs new file mode 100644 index 00000000000..6472c08c222 --- /dev/null +++ b/src/test/compile-fail/aux/issue_3907.rs @@ -0,0 +1,13 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub trait Foo { + fn bar(); +} diff --git a/src/test/compile-fail/aux/issue_5844_aux.rs b/src/test/compile-fail/aux/issue_5844_aux.rs new file mode 100644 index 00000000000..5c878b1e667 --- /dev/null +++ b/src/test/compile-fail/aux/issue_5844_aux.rs @@ -0,0 +1,17 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(libc)] + +extern crate libc; + +extern "C" { + pub fn rand() -> libc::c_int; +} diff --git a/src/test/compile-fail/aux/lifetime_bound_will_change_warning_lib.rs b/src/test/compile-fail/aux/lifetime_bound_will_change_warning_lib.rs new file mode 100644 index 00000000000..95f8b39c487 --- /dev/null +++ b/src/test/compile-fail/aux/lifetime_bound_will_change_warning_lib.rs @@ -0,0 +1,21 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "rlib"] + +// Helper for testing that we get suitable warnings when lifetime +// bound change will cause breakage. + +pub fn just_ref(x: &Fn()) { +} + +pub fn ref_obj(x: &Box) { + // this will change to &Box... +} diff --git a/src/test/compile-fail/aux/lint_output_format.rs b/src/test/compile-fail/aux/lint_output_format.rs new file mode 100644 index 00000000000..0553b4a49b7 --- /dev/null +++ b/src/test/compile-fail/aux/lint_output_format.rs @@ -0,0 +1,30 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="lint_output_format"] +#![crate_type = "lib"] +#![feature(staged_api)] +#![unstable(feature = "test_feature", issue = "0")] + +#[stable(feature = "test_feature", since = "1.0.0")] +#[rustc_deprecated(since = "1.0.0", reason = "text")] +pub fn foo() -> usize { + 20 +} + +#[unstable(feature = "test_feature", issue = "0")] +pub fn bar() -> usize { + 40 +} + +#[unstable(feature = "test_feature", issue = "0")] +pub fn baz() -> usize { + 30 +} diff --git a/src/test/compile-fail/aux/lint_stability.rs b/src/test/compile-fail/aux/lint_stability.rs new file mode 100644 index 00000000000..3100aba4b72 --- /dev/null +++ b/src/test/compile-fail/aux/lint_stability.rs @@ -0,0 +1,179 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. +#![crate_name="lint_stability"] +#![crate_type = "lib"] +#![feature(staged_api)] +#![stable(feature = "lint_stability", since = "1.0.0")] + +#[stable(feature = "test_feature", since = "1.0.0")] +#[rustc_deprecated(since = "1.0.0", reason = "text")] +pub fn deprecated() {} +#[stable(feature = "test_feature", since = "1.0.0")] +#[rustc_deprecated(since = "1.0.0", reason = "text")] +pub fn deprecated_text() {} + +#[unstable(feature = "test_feature", issue = "0")] +#[rustc_deprecated(since = "1.0.0", reason = "text")] +pub fn deprecated_unstable() {} +#[unstable(feature = "test_feature", issue = "0")] +#[rustc_deprecated(since = "1.0.0", reason = "text")] +pub fn deprecated_unstable_text() {} + +#[unstable(feature = "test_feature", issue = "0")] +pub fn unstable() {} +#[unstable(feature = "test_feature", reason = "text", issue = "0")] +pub fn unstable_text() {} + +#[stable(feature = "rust1", since = "1.0.0")] +pub fn stable() {} +#[stable(feature = "rust1", since = "1.0.0")] +pub fn stable_text() {} + +#[stable(feature = "rust1", since = "1.0.0")] +pub struct MethodTester; + +impl MethodTester { + #[stable(feature = "test_feature", since = "1.0.0")] + #[rustc_deprecated(since = "1.0.0", reason = "text")] + pub fn method_deprecated(&self) {} + #[stable(feature = "test_feature", since = "1.0.0")] + #[rustc_deprecated(since = "1.0.0", reason = "text")] + pub fn method_deprecated_text(&self) {} + + #[unstable(feature = "test_feature", issue = "0")] + #[rustc_deprecated(since = "1.0.0", reason = "text")] + pub fn method_deprecated_unstable(&self) {} + #[unstable(feature = "test_feature", issue = "0")] + #[rustc_deprecated(since = "1.0.0", reason = "text")] + pub fn method_deprecated_unstable_text(&self) {} + + #[unstable(feature = "test_feature", issue = "0")] + pub fn method_unstable(&self) {} + #[unstable(feature = "test_feature", reason = "text", issue = "0")] + pub fn method_unstable_text(&self) {} + + #[stable(feature = "rust1", since = "1.0.0")] + pub fn method_stable(&self) {} + #[stable(feature = "rust1", since = "1.0.0")] + pub fn method_stable_text(&self) {} +} + +#[stable(feature = "test_feature", since = "1.0.0")] +pub trait Trait { + #[stable(feature = "test_feature", since = "1.0.0")] + #[rustc_deprecated(since = "1.0.0", reason = "text")] + fn trait_deprecated(&self) {} + #[stable(feature = "test_feature", since = "1.0.0")] + #[rustc_deprecated(since = "1.0.0", reason = "text")] + fn trait_deprecated_text(&self) {} + + #[unstable(feature = "test_feature", issue = "0")] + #[rustc_deprecated(since = "1.0.0", reason = "text")] + fn trait_deprecated_unstable(&self) {} + #[unstable(feature = "test_feature", issue = "0")] + #[rustc_deprecated(since = "1.0.0", reason = "text")] + fn trait_deprecated_unstable_text(&self) {} + + #[unstable(feature = "test_feature", issue = "0")] + fn trait_unstable(&self) {} + #[unstable(feature = "test_feature", reason = "text", issue = "0")] + fn trait_unstable_text(&self) {} + + #[stable(feature = "rust1", since = "1.0.0")] + fn trait_stable(&self) {} + #[stable(feature = "rust1", since = "1.0.0")] + fn trait_stable_text(&self) {} +} + +#[stable(feature = "test_feature", since = "1.0.0")] +impl Trait for MethodTester {} + +#[unstable(feature = "test_feature", issue = "0")] +pub trait UnstableTrait { fn dummy(&self) { } } + +#[stable(feature = "test_feature", since = "1.0.0")] +#[rustc_deprecated(since = "1.0.0", reason = "text")] +pub trait DeprecatedTrait { + #[stable(feature = "test_feature", since = "1.0.0")] fn dummy(&self) { } +} + +#[stable(feature = "test_feature", since = "1.0.0")] +#[rustc_deprecated(since = "1.0.0", reason = "text")] +pub struct DeprecatedStruct { + #[stable(feature = "test_feature", since = "1.0.0")] pub i: isize +} +#[unstable(feature = "test_feature", issue = "0")] +#[rustc_deprecated(since = "1.0.0", reason = "text")] +pub struct DeprecatedUnstableStruct { + #[stable(feature = "test_feature", since = "1.0.0")] pub i: isize +} +#[unstable(feature = "test_feature", issue = "0")] +pub struct UnstableStruct { + #[stable(feature = "test_feature", since = "1.0.0")] pub i: isize +} +#[stable(feature = "rust1", since = "1.0.0")] +pub struct StableStruct { + #[stable(feature = "test_feature", since = "1.0.0")] pub i: isize +} + +#[stable(feature = "test_feature", since = "1.0.0")] +#[rustc_deprecated(since = "1.0.0", reason = "text")] +pub struct DeprecatedUnitStruct; +#[unstable(feature = "test_feature", issue = "0")] +#[rustc_deprecated(since = "1.0.0", reason = "text")] +pub struct DeprecatedUnstableUnitStruct; +#[unstable(feature = "test_feature", issue = "0")] +pub struct UnstableUnitStruct; +#[stable(feature = "rust1", since = "1.0.0")] +pub struct StableUnitStruct; + +#[stable(feature = "test_feature", since = "1.0.0")] +pub enum Enum { + #[stable(feature = "test_feature", since = "1.0.0")] + #[rustc_deprecated(since = "1.0.0", reason = "text")] + DeprecatedVariant, + #[unstable(feature = "test_feature", issue = "0")] + #[rustc_deprecated(since = "1.0.0", reason = "text")] + DeprecatedUnstableVariant, + #[unstable(feature = "test_feature", issue = "0")] + UnstableVariant, + + #[stable(feature = "rust1", since = "1.0.0")] + StableVariant, +} + +#[stable(feature = "test_feature", since = "1.0.0")] +#[rustc_deprecated(since = "1.0.0", reason = "text")] +pub struct DeprecatedTupleStruct(#[stable(feature = "rust1", since = "1.0.0")] pub isize); +#[unstable(feature = "test_feature", issue = "0")] +#[rustc_deprecated(since = "1.0.0", reason = "text")] +pub struct DeprecatedUnstableTupleStruct(#[stable(feature = "rust1", since = "1.0.0")] pub isize); +#[unstable(feature = "test_feature", issue = "0")] +pub struct UnstableTupleStruct(#[stable(feature = "rust1", since = "1.0.0")] pub isize); +#[stable(feature = "rust1", since = "1.0.0")] +pub struct StableTupleStruct(#[stable(feature = "rust1", since = "1.0.0")] pub isize); + +#[stable(feature = "test_feature", since = "1.0.0")] +#[macro_export] +macro_rules! macro_test { + () => (deprecated()); +} + +#[stable(feature = "test_feature", since = "1.0.0")] +#[macro_export] +macro_rules! macro_test_arg { + ($func:expr) => ($func); +} + +#[stable(feature = "test_feature", since = "1.0.0")] +#[macro_export] +macro_rules! macro_test_arg_nested { + ($func:ident) => (macro_test_arg!($func())); +} diff --git a/src/test/compile-fail/aux/lint_stability_fields.rs b/src/test/compile-fail/aux/lint_stability_fields.rs new file mode 100644 index 00000000000..8c6b98ab510 --- /dev/null +++ b/src/test/compile-fail/aux/lint_stability_fields.rs @@ -0,0 +1,61 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(staged_api)] +#![stable(feature = "rust1", since = "1.0.0")] + +#[stable(feature = "rust1", since = "1.0.0")] +pub struct Stable { + #[stable(feature = "rust1", since = "1.0.0")] + pub inherit: u8, // it's a lie (stable doesn't inherit) + #[unstable(feature = "test_feature", issue = "0")] + pub override1: u8, + #[rustc_deprecated(since = "1.0.0", reason = "text")] + #[unstable(feature = "test_feature", issue = "0")] + pub override2: u8, +} + +#[stable(feature = "rust1", since = "1.0.0")] +pub struct Stable2(#[stable(feature = "rust1", since = "1.0.0")] pub u8, + #[unstable(feature = "test_feature", issue = "0")] pub u8, + #[unstable(feature = "test_feature", issue = "0")] + #[rustc_deprecated(since = "1.0.0", reason = "text")] pub u8); + +#[unstable(feature = "test_feature", issue = "0")] +pub struct Unstable { + pub inherit: u8, + #[stable(feature = "rust1", since = "1.0.0")] + pub override1: u8, + #[rustc_deprecated(since = "1.0.0", reason = "text")] + #[unstable(feature = "test_feature", issue = "0")] + pub override2: u8, +} + +#[unstable(feature = "test_feature", issue = "0")] +pub struct Unstable2(pub u8, + #[stable(feature = "rust1", since = "1.0.0")] pub u8, + #[unstable(feature = "test_feature", issue = "0")] + #[rustc_deprecated(since = "1.0.0", reason = "text")] pub u8); + +#[unstable(feature = "test_feature", issue = "0")] +#[rustc_deprecated(since = "1.0.0", reason = "text")] +pub struct Deprecated { + pub inherit: u8, + #[stable(feature = "rust1", since = "1.0.0")] + pub override1: u8, + #[unstable(feature = "test_feature", issue = "0")] + pub override2: u8, +} + +#[unstable(feature = "test_feature", issue = "0")] +#[rustc_deprecated(since = "1.0.0", reason = "text")] +pub struct Deprecated2(pub u8, + #[stable(feature = "rust1", since = "1.0.0")] pub u8, + #[unstable(feature = "test_feature", issue = "0")] pub u8); diff --git a/src/test/compile-fail/aux/lint_unused_extern_crate.rs b/src/test/compile-fail/aux/lint_unused_extern_crate.rs new file mode 100644 index 00000000000..2661b1f4eb4 --- /dev/null +++ b/src/test/compile-fail/aux/lint_unused_extern_crate.rs @@ -0,0 +1,11 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn foo() {} diff --git a/src/test/compile-fail/aux/macro_crate_nonterminal.rs b/src/test/compile-fail/aux/macro_crate_nonterminal.rs new file mode 100644 index 00000000000..4f75e2b5d75 --- /dev/null +++ b/src/test/compile-fail/aux/macro_crate_nonterminal.rs @@ -0,0 +1,22 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn increment(x: usize) -> usize { + x + 1 +} + +#[macro_export] +macro_rules! increment { + ($x:expr) => ($crate::increment($x)) +} + +pub fn check_local() { + assert_eq!(increment!(3), 4); +} diff --git a/src/test/compile-fail/aux/macro_non_reexport_2.rs b/src/test/compile-fail/aux/macro_non_reexport_2.rs new file mode 100644 index 00000000000..910fcd2e367 --- /dev/null +++ b/src/test/compile-fail/aux/macro_non_reexport_2.rs @@ -0,0 +1,19 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "dylib"] + +// Since we load a serialized macro with all its attributes, accidentally +// re-exporting a `#[macro_export] macro_rules!` is something of a concern! +// +// We avoid it at the moment only because of the order in which we do things. + +#[macro_use] #[no_link] +extern crate macro_reexport_1; diff --git a/src/test/compile-fail/aux/macro_reexport_1.rs b/src/test/compile-fail/aux/macro_reexport_1.rs new file mode 100644 index 00000000000..aaeccc6e898 --- /dev/null +++ b/src/test/compile-fail/aux/macro_reexport_1.rs @@ -0,0 +1,15 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "dylib"] +#[macro_export] +macro_rules! reexported { + () => ( 3 ) +} diff --git a/src/test/compile-fail/aux/namespaced_enums.rs b/src/test/compile-fail/aux/namespaced_enums.rs new file mode 100644 index 00000000000..3bf39b788db --- /dev/null +++ b/src/test/compile-fail/aux/namespaced_enums.rs @@ -0,0 +1,20 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub enum Foo { + A, + B(isize), + C { a: isize }, +} + +impl Foo { + pub fn foo() {} + pub fn bar(&self) {} +} diff --git a/src/test/compile-fail/aux/needs_allocator.rs b/src/test/compile-fail/aux/needs_allocator.rs new file mode 100644 index 00000000000..51003160427 --- /dev/null +++ b/src/test/compile-fail/aux/needs_allocator.rs @@ -0,0 +1,16 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +#![feature(needs_allocator)] +#![no_std] +#![needs_allocator] +#![crate_type = "rlib"] diff --git a/src/test/compile-fail/aux/no_method_suggested_traits.rs b/src/test/compile-fail/aux/no_method_suggested_traits.rs new file mode 100644 index 00000000000..20cebb9be17 --- /dev/null +++ b/src/test/compile-fail/aux/no_method_suggested_traits.rs @@ -0,0 +1,46 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub use reexport::Reexported; + +pub struct Foo; +pub enum Bar { X } + +pub mod foo { + pub trait PubPub { + fn method(&self) {} + + fn method3(&self) {} + } + + impl PubPub for u32 {} + impl PubPub for i32 {} +} +pub mod bar { + trait PubPriv { + fn method(&self); + } +} +mod qux { + pub trait PrivPub { + fn method(&self); + } +} +mod quz { + trait PrivPriv { + fn method(&self); + } +} + +mod reexport { + pub trait Reexported { + fn method(&self); + } +} diff --git a/src/test/compile-fail/aux/noexporttypelib.rs b/src/test/compile-fail/aux/noexporttypelib.rs new file mode 100644 index 00000000000..5ae8e0d298e --- /dev/null +++ b/src/test/compile-fail/aux/noexporttypelib.rs @@ -0,0 +1,12 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub type oint = Option; +pub fn foo() -> oint { Some(3) } diff --git a/src/test/compile-fail/aux/orphan_check_diagnostics.rs b/src/test/compile-fail/aux/orphan_check_diagnostics.rs new file mode 100644 index 00000000000..cf3e9903b5a --- /dev/null +++ b/src/test/compile-fail/aux/orphan_check_diagnostics.rs @@ -0,0 +1,11 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub trait RemoteTrait { fn dummy(&self) { } } diff --git a/src/test/compile-fail/aux/privacy_tuple_struct.rs b/src/test/compile-fail/aux/privacy_tuple_struct.rs new file mode 100644 index 00000000000..141b6bdd604 --- /dev/null +++ b/src/test/compile-fail/aux/privacy_tuple_struct.rs @@ -0,0 +1,14 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct A(()); +pub struct B(isize); +pub struct C(pub isize, isize); +pub struct D(pub isize); diff --git a/src/test/compile-fail/aux/private_trait_xc.rs b/src/test/compile-fail/aux/private_trait_xc.rs new file mode 100644 index 00000000000..37ee10c8d37 --- /dev/null +++ b/src/test/compile-fail/aux/private_trait_xc.rs @@ -0,0 +1,11 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +trait Foo {} diff --git a/src/test/compile-fail/aux/pub_static_array.rs b/src/test/compile-fail/aux/pub_static_array.rs new file mode 100644 index 00000000000..4419a5ae83c --- /dev/null +++ b/src/test/compile-fail/aux/pub_static_array.rs @@ -0,0 +1,11 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub static ARRAY: &'static [u8] = &[1]; diff --git a/src/test/compile-fail/aux/rbmtp_cross_crate_lib.rs b/src/test/compile-fail/aux/rbmtp_cross_crate_lib.rs new file mode 100644 index 00000000000..f49ac4fc8e4 --- /dev/null +++ b/src/test/compile-fail/aux/rbmtp_cross_crate_lib.rs @@ -0,0 +1,42 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Check that method bounds declared on traits/impls in a cross-crate +// scenario work. This is the library portion of the test. + +pub enum MaybeOwned<'a> { + Owned(isize), + Borrowed(&'a isize) +} + +pub struct Inv<'a> { // invariant w/r/t 'a + x: &'a mut &'a isize +} + +// I encountered a bug at some point with encoding the IntoMaybeOwned +// trait, so I'll use that as the template for this test. +pub trait IntoMaybeOwned<'a> { + fn into_maybe_owned(self) -> MaybeOwned<'a>; + + // Note: without this `into_inv` method, the trait is + // contravariant w/r/t `'a`, since if you look strictly at the + // interface, it only returns `'a`. This complicates the + // downstream test since it wants invariance to force an error. + // Hence we add this method. + fn into_inv(self) -> Inv<'a>; + + fn bigger_region<'b:'a>(self, b: Inv<'b>); +} + +impl<'a> IntoMaybeOwned<'a> for Inv<'a> { + fn into_maybe_owned(self) -> MaybeOwned<'a> { panic!() } + fn into_inv(self) -> Inv<'a> { panic!() } + fn bigger_region<'b:'a>(self, b: Inv<'b>) { panic!() } +} diff --git a/src/test/compile-fail/aux/stability_attribute_issue.rs b/src/test/compile-fail/aux/stability_attribute_issue.rs new file mode 100644 index 00000000000..22c13f69af9 --- /dev/null +++ b/src/test/compile-fail/aux/stability_attribute_issue.rs @@ -0,0 +1,19 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(staged_api)] +#![stable(feature = "foo", since = "1.2.0")] + + +#[unstable(feature = "foo", issue = "1")] +pub fn unstable() {} + +#[unstable(feature = "foo", reason = "message", issue = "2")] +pub fn unstable_msg() {} diff --git a/src/test/compile-fail/aux/stability_cfg1.rs b/src/test/compile-fail/aux/stability_cfg1.rs new file mode 100644 index 00000000000..c839993b047 --- /dev/null +++ b/src/test/compile-fail/aux/stability_cfg1.rs @@ -0,0 +1,13 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![cfg_attr(foo, experimental)] +#![cfg_attr(not(foo), stable(feature = "test_feature", since = "1.0.0"))] +#![feature(staged_api)] diff --git a/src/test/compile-fail/aux/stability_cfg2.rs b/src/test/compile-fail/aux/stability_cfg2.rs new file mode 100644 index 00000000000..c1e2b1d1bfe --- /dev/null +++ b/src/test/compile-fail/aux/stability_cfg2.rs @@ -0,0 +1,15 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags:--cfg foo + +#![cfg_attr(foo, unstable(feature = "test_feature", issue = "0"))] +#![cfg_attr(not(foo), stable(feature = "test_feature", since = "1.0.0"))] +#![feature(staged_api)] diff --git a/src/test/compile-fail/aux/static_priv_by_default.rs b/src/test/compile-fail/aux/static_priv_by_default.rs new file mode 100644 index 00000000000..859f38e809f --- /dev/null +++ b/src/test/compile-fail/aux/static_priv_by_default.rs @@ -0,0 +1,61 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +static private: isize = 0; +pub static public: isize = 0; + +pub struct A(()); + +impl A { + fn foo() {} +} + +mod foo { + pub static a: isize = 0; + pub fn b() {} + pub struct c; + pub enum d {} + pub type e = isize; + + pub struct A(()); + + impl A { + fn foo() {} + } + + // these are public so the parent can reexport them. + pub static reexported_a: isize = 0; + pub fn reexported_b() {} + pub struct reexported_c; + pub enum reexported_d {} + pub type reexported_e = isize; +} + +pub mod bar { + pub use foo::reexported_a as e; + pub use foo::reexported_b as f; + pub use foo::reexported_c as g; + pub use foo::reexported_d as h; + pub use foo::reexported_e as i; +} + +pub static a: isize = 0; +pub fn b() {} +pub struct c; +pub enum d {} +pub type e = isize; + +static j: isize = 0; +fn k() {} +struct l; +enum m {} +type n = isize; diff --git a/src/test/compile-fail/aux/struct_field_privacy.rs b/src/test/compile-fail/aux/struct_field_privacy.rs new file mode 100644 index 00000000000..5fea97da03e --- /dev/null +++ b/src/test/compile-fail/aux/struct_field_privacy.rs @@ -0,0 +1,19 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct A { + a: isize, + pub b: isize, +} + +pub struct B { + pub a: isize, + b: isize, +} diff --git a/src/test/compile-fail/aux/struct_variant_privacy.rs b/src/test/compile-fail/aux/struct_variant_privacy.rs new file mode 100644 index 00000000000..40868fa3f70 --- /dev/null +++ b/src/test/compile-fail/aux/struct_variant_privacy.rs @@ -0,0 +1,13 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +enum Bar { + Baz { a: isize } +} diff --git a/src/test/compile-fail/aux/svh-a-base.rs b/src/test/compile-fail/aux/svh-a-base.rs new file mode 100644 index 00000000000..31a97f695f0 --- /dev/null +++ b/src/test/compile-fail/aux/svh-a-base.rs @@ -0,0 +1,35 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! The `svh-a-*.rs` files are all deviations from the base file +//! svh-a-base.rs with some difference (usually in `fn foo`) that +//! should not affect the strict version hash (SVH) computation +//! (#14132). + +#![crate_name = "a"] + +macro_rules! three { + () => { 3 } +} + +pub trait U {} +pub trait V {} +impl U for () {} +impl V for () {} + +static A_CONSTANT : isize = 2; + +pub fn foo(_: isize) -> isize { + 3 +} + +pub fn an_unused_name() -> isize { + 4 +} diff --git a/src/test/compile-fail/aux/svh-a-change-lit.rs b/src/test/compile-fail/aux/svh-a-change-lit.rs new file mode 100644 index 00000000000..5339fc8295c --- /dev/null +++ b/src/test/compile-fail/aux/svh-a-change-lit.rs @@ -0,0 +1,35 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! The `svh-a-*.rs` files are all deviations from the base file +//! svh-a-base.rs with some difference (usually in `fn foo`) that +//! should not affect the strict version hash (SVH) computation +//! (#14132). + +#![crate_name = "a"] + +macro_rules! three { + () => { 3 } +} + +pub trait U {} +pub trait V {} +impl U for () {} +impl V for () {} + +static A_CONSTANT : isize = 2; + +pub fn foo(_: isize) -> isize { + 0 +} + +pub fn an_unused_name() -> isize { + 4 +} diff --git a/src/test/compile-fail/aux/svh-a-change-significant-cfg.rs b/src/test/compile-fail/aux/svh-a-change-significant-cfg.rs new file mode 100644 index 00000000000..2a5d9446f87 --- /dev/null +++ b/src/test/compile-fail/aux/svh-a-change-significant-cfg.rs @@ -0,0 +1,37 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! The `svh-a-*.rs` files are all deviations from the base file +//! svh-a-base.rs with some difference (usually in `fn foo`) that +//! should not affect the strict version hash (SVH) computation +//! (#14132). + +#![crate_name = "a"] + +macro_rules! three { + () => { 3 } +} + +pub trait U {} +pub trait V {} +impl U for () {} +impl V for () {} + +static A_CONSTANT : isize = 2; + +#[cfg(some_flag)] +pub fn foo(_: isize) -> isize { + 3 +} + +#[cfg(not(some_flag))] +pub fn an_unused_name() -> isize { + 4 +} diff --git a/src/test/compile-fail/aux/svh-a-change-trait-bound.rs b/src/test/compile-fail/aux/svh-a-change-trait-bound.rs new file mode 100644 index 00000000000..61f2f2803ab --- /dev/null +++ b/src/test/compile-fail/aux/svh-a-change-trait-bound.rs @@ -0,0 +1,35 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! The `svh-a-*.rs` files are all deviations from the base file +//! svh-a-base.rs with some difference (usually in `fn foo`) that +//! should not affect the strict version hash (SVH) computation +//! (#14132). + +#![crate_name = "a"] + +macro_rules! three { + () => { 3 } +} + +pub trait U {} +pub trait V {} +impl U for () {} +impl V for () {} + +static A_CONSTANT : isize = 2; + +pub fn foo(_: isize) -> isize { + 3 +} + +pub fn an_unused_name() -> isize { + 4 +} diff --git a/src/test/compile-fail/aux/svh-a-change-type-arg.rs b/src/test/compile-fail/aux/svh-a-change-type-arg.rs new file mode 100644 index 00000000000..270ce95be2b --- /dev/null +++ b/src/test/compile-fail/aux/svh-a-change-type-arg.rs @@ -0,0 +1,35 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! The `svh-a-*.rs` files are all deviations from the base file +//! svh-a-base.rs with some difference (usually in `fn foo`) that +//! should not affect the strict version hash (SVH) computation +//! (#14132). + +#![crate_name = "a"] + +macro_rules! three { + () => { 3 } +} + +pub trait U {} +pub trait V {} +impl U for () {} +impl V for () {} + +static A_CONSTANT : isize = 2; + +pub fn foo(_: i32) -> isize { + 3 +} + +pub fn an_unused_name() -> isize { + 4 +} diff --git a/src/test/compile-fail/aux/svh-a-change-type-ret.rs b/src/test/compile-fail/aux/svh-a-change-type-ret.rs new file mode 100644 index 00000000000..de4cc85a7dc --- /dev/null +++ b/src/test/compile-fail/aux/svh-a-change-type-ret.rs @@ -0,0 +1,35 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! The `svh-a-*.rs` files are all deviations from the base file +//! svh-a-base.rs with some difference (usually in `fn foo`) that +//! should not affect the strict version hash (SVH) computation +//! (#14132). + +#![crate_name = "a"] + +macro_rules! three { + () => { 3 } +} + +pub trait U {} +pub trait V {} +impl U for () {} +impl V for () {} + +static A_CONSTANT : isize = 2; + +pub fn foo(_: isize) -> i64 { + 3 +} + +pub fn an_unused_name() -> i32 { + 4 +} diff --git a/src/test/compile-fail/aux/svh-a-change-type-static.rs b/src/test/compile-fail/aux/svh-a-change-type-static.rs new file mode 100644 index 00000000000..62f7986f1c3 --- /dev/null +++ b/src/test/compile-fail/aux/svh-a-change-type-static.rs @@ -0,0 +1,36 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! The `svh-a-*.rs` files are all deviations from the base file +//! svh-a-base.rs with some difference (usually in `fn foo`) that +//! should not affect the strict version hash (SVH) computation +//! (#14132). + +#![crate_name = "a"] +#![feature(core)] + +macro_rules! three { + () => { 3 } +} + +pub trait U {} +pub trait V {} +impl U for () {} +impl V for () {} + +static A_CONSTANT : i32 = 2; + +pub fn foo(_: isize) -> isize { + 3 +} + +pub fn an_unused_name() -> isize { + 4 +} diff --git a/src/test/compile-fail/aux/svh-b.rs b/src/test/compile-fail/aux/svh-b.rs new file mode 100644 index 00000000000..b8946fdc995 --- /dev/null +++ b/src/test/compile-fail/aux/svh-b.rs @@ -0,0 +1,23 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! This is a client of the `a` crate defined in "svn-a-base.rs". The +//! rpass and cfail tests (such as "run-pass/svh-add-comment.rs") use +//! it by swapping in a different object code library crate built from +//! some variant of "svn-a-base.rs", and then we are checking if the +//! compiler properly ignores or accepts the change, based on whether +//! the change could affect the downstream crate content or not +//! (#14132). + +#![crate_name = "b"] + +extern crate a; + +pub fn foo() { assert_eq!(a::foo::<()>(0), 3); } diff --git a/src/test/compile-fail/aux/svh-uta-base.rs b/src/test/compile-fail/aux/svh-uta-base.rs new file mode 100644 index 00000000000..6bd3ddab06c --- /dev/null +++ b/src/test/compile-fail/aux/svh-uta-base.rs @@ -0,0 +1,32 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! "compile-fail/svh-uta-trait.rs" is checking that we detect a +//! change from `use foo::TraitB` to use `foo::TraitB` in the hash +//! (SVH) computation (#14132), since that will affect method +//! resolution. +//! +//! This is the upstream crate. + +#![crate_name = "uta"] + +mod traits { + pub trait TraitA { fn val(&self) -> isize { 2 } } + pub trait TraitB { fn val(&self) -> isize { 3 } } +} + +impl traits::TraitA for () {} +impl traits::TraitB for () {} + +pub fn foo(_: isize) -> isize { + use traits::TraitA; + let v = (); + v.val() +} diff --git a/src/test/compile-fail/aux/svh-uta-change-use-trait.rs b/src/test/compile-fail/aux/svh-uta-change-use-trait.rs new file mode 100644 index 00000000000..e8634168177 --- /dev/null +++ b/src/test/compile-fail/aux/svh-uta-change-use-trait.rs @@ -0,0 +1,32 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! "compile-fail/svh-uta-trait.rs" is checking that we detect a +//! change from `use foo::TraitB` to use `foo::TraitB` in the hash +//! (SVH) computation (#14132), since that will affect method +//! resolution. +//! +//! This is the upstream crate. + +#![crate_name = "uta"] + +mod traits { + pub trait TraitA { fn val(&self) -> isize { 2 } } + pub trait TraitB { fn val(&self) -> isize { 3 } } +} + +impl traits::TraitA for () {} +impl traits::TraitB for () {} + +pub fn foo(_: isize) -> isize { + use traits::TraitB; + let v = (); + v.val() +} diff --git a/src/test/compile-fail/aux/svh-utb.rs b/src/test/compile-fail/aux/svh-utb.rs new file mode 100644 index 00000000000..eb3da985242 --- /dev/null +++ b/src/test/compile-fail/aux/svh-utb.rs @@ -0,0 +1,22 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! "compile-fail/svh-uta-trait.rs" is checking that we detect a +//! change from `use foo::TraitB` to use `foo::TraitB` in the hash +//! (SVH) computation (#14132), since that will affect method +//! resolution. +//! +//! This is the downstream crate. + +#![crate_name = "utb"] + +extern crate uta; + +pub fn foo() { assert_eq!(uta::foo::<()>(0), 3); } diff --git a/src/test/compile-fail/aux/tdticc_coherence_lib.rs b/src/test/compile-fail/aux/tdticc_coherence_lib.rs new file mode 100644 index 00000000000..2e425ac96c5 --- /dev/null +++ b/src/test/compile-fail/aux/tdticc_coherence_lib.rs @@ -0,0 +1,17 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(optin_builtin_traits, core)] +#![crate_type = "rlib"] + +pub trait DefaultedTrait { } +impl DefaultedTrait for .. { } + +pub struct Something { t: T } diff --git a/src/test/compile-fail/aux/trait_bounds_on_structs_and_enums_xc.rs b/src/test/compile-fail/aux/trait_bounds_on_structs_and_enums_xc.rs new file mode 100644 index 00000000000..29cb0bc176a --- /dev/null +++ b/src/test/compile-fail/aux/trait_bounds_on_structs_and_enums_xc.rs @@ -0,0 +1,23 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub trait Trait { + fn dummy(&self) { } +} + +pub struct Foo { + pub x: T, +} + +pub enum Bar { + ABar(isize), + BBar(T), + CBar(usize), +} diff --git a/src/test/compile-fail/aux/trait_impl_conflict.rs b/src/test/compile-fail/aux/trait_impl_conflict.rs new file mode 100644 index 00000000000..c3ecbb014dc --- /dev/null +++ b/src/test/compile-fail/aux/trait_impl_conflict.rs @@ -0,0 +1,15 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub trait Foo { +} + +impl Foo for isize { +} diff --git a/src/test/compile-fail/aux/trait_safety_lib.rs b/src/test/compile-fail/aux/trait_safety_lib.rs new file mode 100644 index 00000000000..585a756fd07 --- /dev/null +++ b/src/test/compile-fail/aux/trait_safety_lib.rs @@ -0,0 +1,19 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Simple smoke test that unsafe traits can be compiled etc. + +pub unsafe trait Foo { + fn foo(&self) -> isize; +} + +unsafe impl Foo for isize { + fn foo(&self) -> isize { *self } +} diff --git a/src/test/compile-fail/aux/trait_superkinds_in_metadata.rs b/src/test/compile-fail/aux/trait_superkinds_in_metadata.rs new file mode 100644 index 00000000000..0fa2d3459f4 --- /dev/null +++ b/src/test/compile-fail/aux/trait_superkinds_in_metadata.rs @@ -0,0 +1,18 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Test library crate for cross-crate usages of traits inheriting +// from the builtin kinds. Mostly tests metadata correctness. + +#![crate_type="lib"] + +pub trait RequiresShare : Sync { } +pub trait RequiresRequiresShareAndSend : RequiresShare + Send { } +pub trait RequiresCopy : Copy { } diff --git a/src/test/compile-fail/aux/two_macros.rs b/src/test/compile-fail/aux/two_macros.rs new file mode 100644 index 00000000000..060960f0dbc --- /dev/null +++ b/src/test/compile-fail/aux/two_macros.rs @@ -0,0 +1,15 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[macro_export] +macro_rules! macro_one { () => ("one") } + +#[macro_export] +macro_rules! macro_two { () => ("two") } diff --git a/src/test/compile-fail/aux/unreachable_variant.rs b/src/test/compile-fail/aux/unreachable_variant.rs new file mode 100644 index 00000000000..8ca85f20ab2 --- /dev/null +++ b/src/test/compile-fail/aux/unreachable_variant.rs @@ -0,0 +1,15 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +mod super_sekrit { + pub enum sooper_sekrit { + quux, baz + } +} diff --git a/src/test/compile-fail/aux/use_from_trait_xc.rs b/src/test/compile-fail/aux/use_from_trait_xc.rs new file mode 100644 index 00000000000..7024c9dad7c --- /dev/null +++ b/src/test/compile-fail/aux/use_from_trait_xc.rs @@ -0,0 +1,41 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(associated_consts)] + +pub use self::sub::{Bar, Baz}; + +pub trait Trait { + fn foo(&self); + type Assoc; + const CONST: u32; +} + +struct Foo; + +impl Foo { + pub fn new() {} + + pub const C: u32 = 0; +} + +mod sub { + pub struct Bar; + + impl Bar { + pub fn new() {} + } + + pub enum Baz {} + + impl Baz { + pub fn new() {} + } +} diff --git a/src/test/compile-fail/aux/variant-namespacing.rs b/src/test/compile-fail/aux/variant-namespacing.rs new file mode 100644 index 00000000000..d7fd2968495 --- /dev/null +++ b/src/test/compile-fail/aux/variant-namespacing.rs @@ -0,0 +1,15 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub enum XE { + XStruct { a: u8 }, + XTuple(u8), + XUnit, +} diff --git a/src/test/compile-fail/aux/weak-lang-items.rs b/src/test/compile-fail/aux/weak-lang-items.rs new file mode 100644 index 00000000000..6434e62b6f7 --- /dev/null +++ b/src/test/compile-fail/aux/weak-lang-items.rs @@ -0,0 +1,32 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +// This aux-file will require the eh_personality function to be codegen'd, but +// it hasn't been defined just yet. Make sure we don't explode. + +#![no_std] +#![crate_type = "rlib"] + +struct A; + +impl core::ops::Drop for A { + fn drop(&mut self) {} +} + +pub fn foo() { + let _a = A; + panic!("wut"); +} + +mod std { + pub use core::{option, fmt}; +} diff --git a/src/test/compile-fail/aux/xc_private_method_lib.rs b/src/test/compile-fail/aux/xc_private_method_lib.rs new file mode 100644 index 00000000000..5e7bc61943b --- /dev/null +++ b/src/test/compile-fail/aux/xc_private_method_lib.rs @@ -0,0 +1,43 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] + +pub struct Struct { + pub x: isize +} + +impl Struct { + fn static_meth_struct() -> Struct { + Struct { x: 1 } + } + + fn meth_struct(&self) -> isize { + self.x + } +} + +pub enum Enum { + Variant1(isize), + Variant2(isize) +} + +impl Enum { + fn static_meth_enum() -> Enum { + Enum::Variant2(10) + } + + fn meth_enum(&self) -> isize { + match *self { + Enum::Variant1(x) | + Enum::Variant2(x) => x + } + } +} diff --git a/src/test/compile-fail/aux/xcrate_unit_struct.rs b/src/test/compile-fail/aux/xcrate_unit_struct.rs new file mode 100644 index 00000000000..7a69be2b06c --- /dev/null +++ b/src/test/compile-fail/aux/xcrate_unit_struct.rs @@ -0,0 +1,38 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +// used by the rpass test + +#[derive(Copy, Clone)] +pub struct Struct; + +#[derive(Copy, Clone)] +pub enum Unit { + UnitVariant, + Argument(Struct) +} + +#[derive(Copy, Clone)] +pub struct TupleStruct(pub usize, pub &'static str); + +// used by the cfail test + +#[derive(Copy, Clone)] +pub struct StructWithFields { + foo: isize, +} + +#[derive(Copy, Clone)] +pub enum EnumWithVariants { + EnumVariant, + EnumVariantArg(isize) +} diff --git a/src/test/compile-fail/privacy/restricted/aux/pub_restricted.rs b/src/test/compile-fail/privacy/restricted/aux/pub_restricted.rs new file mode 100644 index 00000000000..b1c88ce6ce5 --- /dev/null +++ b/src/test/compile-fail/privacy/restricted/aux/pub_restricted.rs @@ -0,0 +1,23 @@ +// Copyright 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(pub_restricted)] + +pub(crate) struct Crate; +#[derive(Default)] +pub struct Universe { + pub x: i32, + pub(crate) y: i32 +} + +impl Universe { + pub fn f(&self) {} + pub(crate) fn g(&self) {} +} diff --git a/src/test/debuginfo/aux/cross_crate_debuginfo_type_uniquing.rs b/src/test/debuginfo/aux/cross_crate_debuginfo_type_uniquing.rs new file mode 100644 index 00000000000..f4bc72305a0 --- /dev/null +++ b/src/test/debuginfo/aux/cross_crate_debuginfo_type_uniquing.rs @@ -0,0 +1,26 @@ +// Copyright 2013-2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic +#![crate_type = "rlib"] +// compile-flags:-g + +struct S1; + +impl S1 { + fn f(&mut self) { } +} + + +struct S2; + +impl S2 { + fn f(&mut self) { } +} diff --git a/src/test/debuginfo/aux/cross_crate_spans.rs b/src/test/debuginfo/aux/cross_crate_spans.rs new file mode 100644 index 00000000000..9b6b6221bda --- /dev/null +++ b/src/test/debuginfo/aux/cross_crate_spans.rs @@ -0,0 +1,29 @@ +// Copyright 2013-2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "rlib"] + +#![allow(unused_variables)] +#![feature(omit_gdb_pretty_printer_section)] +#![omit_gdb_pretty_printer_section] + +// no-prefer-dynamic +// compile-flags:-g + +pub fn generic_function(val: T) -> (T, T) { + let result = (val.clone(), val.clone()); + let a_variable: u32 = 123456789; + let another_variable: f64 = 123456789.5; + zzz(); + result +} + +#[inline(never)] +fn zzz() {()} diff --git a/src/test/debuginfo/aux/issue13213aux.rs b/src/test/debuginfo/aux/issue13213aux.rs new file mode 100644 index 00000000000..d0566a1e091 --- /dev/null +++ b/src/test/debuginfo/aux/issue13213aux.rs @@ -0,0 +1,29 @@ +// Copyright 2013-2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] +// compile-flags:-g + +pub use private::P; + +#[derive(Copy, Clone)] +pub struct S { + p: P, +} + +mod private { + #[derive(Copy, Clone)] + pub struct P { + p: i32, + } + pub const THREE: P = P { p: 3 }; +} + +pub static A: S = S { p: private::THREE }; diff --git a/src/test/run-pass-fulldeps/aux/custom_derive_plugin.rs b/src/test/run-pass-fulldeps/aux/custom_derive_plugin.rs new file mode 100644 index 00000000000..5f0ef4de491 --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/custom_derive_plugin.rs @@ -0,0 +1,78 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![feature(plugin_registrar)] +#![feature(box_syntax)] +#![feature(rustc_private)] + +extern crate syntax; +extern crate syntax_ext; +extern crate rustc; +extern crate rustc_plugin; + +use syntax::ast; +use syntax::codemap::Span; +use syntax::ext::base::{MultiDecorator, ExtCtxt, Annotatable}; +use syntax::ext::build::AstBuilder; +use syntax::parse::token; +use syntax::ptr::P; +use syntax_ext::deriving::generic::{cs_fold, TraitDef, MethodDef, combine_substructure}; +use syntax_ext::deriving::generic::ty::{Literal, LifetimeBounds, Path, borrowed_explicit_self}; +use rustc_plugin::Registry; + +#[plugin_registrar] +pub fn plugin_registrar(reg: &mut Registry) { + reg.register_syntax_extension( + token::intern("derive_TotalSum"), + MultiDecorator(box expand)); +} + +fn expand(cx: &mut ExtCtxt, + span: Span, + mitem: &ast::MetaItem, + item: &Annotatable, + push: &mut FnMut(Annotatable)) { + let trait_def = TraitDef { + span: span, + attributes: vec![], + path: Path::new(vec!["TotalSum"]), + additional_bounds: vec![], + generics: LifetimeBounds::empty(), + associated_types: vec![], + is_unsafe: false, + methods: vec![ + MethodDef { + name: "total_sum", + generics: LifetimeBounds::empty(), + explicit_self: borrowed_explicit_self(), + args: vec![], + ret_ty: Literal(Path::new_local("isize")), + attributes: vec![], + is_unsafe: false, + combine_substructure: combine_substructure(box |cx, span, substr| { + let zero = cx.expr_isize(span, 0); + cs_fold(false, + |cx, span, subexpr, field, _| { + cx.expr_binary(span, ast::BinOpKind::Add, subexpr, + cx.expr_method_call(span, field, + token::str_to_ident("total_sum"), vec![])) + }, + zero, + box |cx, span, _, _| { cx.span_bug(span, "wtf??"); }, + cx, span, substr) + }), + }, + ], + }; + + trait_def.expand(cx, mitem, item, push) +} diff --git a/src/test/run-pass-fulldeps/aux/custom_derive_plugin_attr.rs b/src/test/run-pass-fulldeps/aux/custom_derive_plugin_attr.rs new file mode 100644 index 00000000000..2878674f0ea --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/custom_derive_plugin_attr.rs @@ -0,0 +1,91 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![feature(plugin_registrar)] +#![feature(box_syntax)] +#![feature(rustc_private)] + +extern crate syntax; +extern crate syntax_ext; +extern crate rustc; +extern crate rustc_plugin; + +use syntax::ast; +use syntax::attr::AttrMetaMethods; +use syntax::codemap::Span; +use syntax::ext::base::{MultiDecorator, ExtCtxt, Annotatable}; +use syntax::ext::build::AstBuilder; +use syntax::parse::token; +use syntax::ptr::P; +use syntax_ext::deriving::generic::{cs_fold, TraitDef, MethodDef, combine_substructure}; +use syntax_ext::deriving::generic::{Substructure, Struct, EnumMatching}; +use syntax_ext::deriving::generic::ty::{Literal, LifetimeBounds, Path, borrowed_explicit_self}; +use rustc_plugin::Registry; + +#[plugin_registrar] +pub fn plugin_registrar(reg: &mut Registry) { + reg.register_syntax_extension( + token::intern("derive_TotalSum"), + MultiDecorator(box expand)); +} + +fn expand(cx: &mut ExtCtxt, + span: Span, + mitem: &ast::MetaItem, + item: &Annotatable, + push: &mut FnMut(Annotatable)) { + let trait_def = TraitDef { + span: span, + attributes: vec![], + path: Path::new(vec!["TotalSum"]), + additional_bounds: vec![], + generics: LifetimeBounds::empty(), + associated_types: vec![], + is_unsafe: false, + methods: vec![ + MethodDef { + name: "total_sum", + generics: LifetimeBounds::empty(), + explicit_self: borrowed_explicit_self(), + args: vec![], + ret_ty: Literal(Path::new_local("isize")), + attributes: vec![], + is_unsafe: false, + combine_substructure: combine_substructure(Box::new(totalsum_substructure)), + }, + ], + }; + + trait_def.expand(cx, mitem, item, push) +} + +// Mostly copied from syntax::ext::deriving::hash +/// Defines how the implementation for `trace()` is to be generated +fn totalsum_substructure(cx: &mut ExtCtxt, trait_span: Span, + substr: &Substructure) -> P { + let fields = match *substr.fields { + Struct(_, ref fs) | EnumMatching(_, _, ref fs) => fs, + _ => cx.span_bug(trait_span, "impossible substructure") + }; + + fields.iter().fold(cx.expr_isize(trait_span, 0), |acc, ref item| { + if item.attrs.iter().find(|a| a.check_name("ignore")).is_some() { + acc + } else { + cx.expr_binary(item.span, ast::BinOpKind::Add, acc, + cx.expr_method_call(item.span, + item.self_.clone(), + substr.method_ident, + Vec::new())) + } + }) +} diff --git a/src/test/run-pass-fulldeps/aux/dummy_mir_pass.rs b/src/test/run-pass-fulldeps/aux/dummy_mir_pass.rs new file mode 100644 index 00000000000..b5234af937b --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/dummy_mir_pass.rs @@ -0,0 +1,55 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![feature(plugin_registrar, rustc_private)] +#![feature(box_syntax)] + +#[macro_use] extern crate rustc; +extern crate rustc_plugin; +extern crate rustc_const_math; +extern crate syntax; + +use rustc::mir::transform::{self, MirPass}; +use rustc::mir::repr::{Mir, Literal}; +use rustc::mir::visit::MutVisitor; +use rustc::ty; +use rustc::middle::const_val::ConstVal; +use rustc_const_math::ConstInt; +use rustc_plugin::Registry; + +use syntax::ast::NodeId; + +struct Pass; + +impl transform::Pass for Pass {} +impl<'tcx> MirPass<'tcx> for Pass { + fn run_pass(&mut self, _: &ty::TyCtxt<'tcx>, _: NodeId, mir: &mut Mir<'tcx>) { + Visitor.visit_mir(mir) + } +} + +struct Visitor; + +impl<'tcx> MutVisitor<'tcx> for Visitor { + fn visit_literal(&mut self, literal: &mut Literal<'tcx>) { + if let Literal::Value { ref mut value } = *literal { + if let ConstVal::Integral(ConstInt::I32(ref mut i @ 11)) = *value { + *i = 42; + } + } + } +} + +#[plugin_registrar] +pub fn plugin_registrar(reg: &mut Registry) { + reg.register_mir_pass(box Pass); +} diff --git a/src/test/run-pass-fulldeps/aux/issue-13560-1.rs b/src/test/run-pass-fulldeps/aux/issue-13560-1.rs new file mode 100644 index 00000000000..858d7269cd8 --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/issue-13560-1.rs @@ -0,0 +1,13 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +#![crate_type = "dylib"] diff --git a/src/test/run-pass-fulldeps/aux/issue-13560-2.rs b/src/test/run-pass-fulldeps/aux/issue-13560-2.rs new file mode 100644 index 00000000000..8e46acca124 --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/issue-13560-2.rs @@ -0,0 +1,13 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +#![crate_type = "rlib"] diff --git a/src/test/run-pass-fulldeps/aux/issue-13560-3.rs b/src/test/run-pass-fulldeps/aux/issue-13560-3.rs new file mode 100644 index 00000000000..c0539aa1b6e --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/issue-13560-3.rs @@ -0,0 +1,16 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +#![crate_type = "rlib"] + +#[macro_use] #[no_link] extern crate issue_13560_1 as t1; +#[macro_use] extern crate issue_13560_2 as t2; diff --git a/src/test/run-pass-fulldeps/aux/issue-16822.rs b/src/test/run-pass-fulldeps/aux/issue-16822.rs new file mode 100644 index 00000000000..0e3041c1174 --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/issue-16822.rs @@ -0,0 +1,30 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] + +use std::cell::RefCell; + +pub struct Window{ + pub data: RefCell +} + +impl Window { + pub fn update(&self, e: i32) { + match e { + 1 => self.data.borrow_mut().update(), + _ => {} + } + } +} + +pub trait Update { + fn update(&mut self); +} diff --git a/src/test/run-pass-fulldeps/aux/issue-18502.rs b/src/test/run-pass-fulldeps/aux/issue-18502.rs new file mode 100644 index 00000000000..718b046e1e4 --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/issue-18502.rs @@ -0,0 +1,31 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] + +struct Foo; +// This is the ICE trigger +struct Formatter; + +trait Show { + fn fmt(&self); +} + +impl Show for Foo { + fn fmt(&self) {} +} + +fn bar(f: extern "Rust" fn(&T), t: &T) { } + +// ICE requirement: this has to be marked as inline +#[inline] +pub fn baz() { + bar(Show::fmt, &Foo); +} diff --git a/src/test/run-pass-fulldeps/aux/issue_16723_multiple_items_syntax_ext.rs b/src/test/run-pass-fulldeps/aux/issue_16723_multiple_items_syntax_ext.rs new file mode 100644 index 00000000000..25a75c2d295 --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/issue_16723_multiple_items_syntax_ext.rs @@ -0,0 +1,36 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![feature(plugin_registrar, quote, rustc_private)] +#![crate_type = "dylib"] + +extern crate syntax; +extern crate rustc; +extern crate rustc_plugin; + +use syntax::ast; +use syntax::codemap; +use syntax::ext::base::{ExtCtxt, MacResult, MacEager}; +use syntax::util::small_vector::SmallVector; +use rustc_plugin::Registry; + +#[plugin_registrar] +pub fn plugin_registrar(reg: &mut Registry) { + reg.register_macro("multiple_items", expand) +} + +fn expand(cx: &mut ExtCtxt, _: codemap::Span, _: &[ast::TokenTree]) -> Box { + MacEager::items(SmallVector::many(vec![ + quote_item!(cx, struct Struct1;).unwrap(), + quote_item!(cx, struct Struct2;).unwrap() + ])) +} diff --git a/src/test/run-pass-fulldeps/aux/linkage-visibility.rs b/src/test/run-pass-fulldeps/aux/linkage-visibility.rs new file mode 100644 index 00000000000..09a2e8ecd87 --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/linkage-visibility.rs @@ -0,0 +1,45 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(rustc_private)] + +// We're testing linkage visibility; the compiler warns us, but we want to +// do the runtime check that these functions aren't exported. +#![allow(private_no_mangle_fns)] + +extern crate rustc_back; + +use rustc_back::dynamic_lib::DynamicLibrary; + +#[no_mangle] +pub fn foo() { bar(); } + +pub fn foo2() { + fn bar2() { + bar(); + } + bar2(); +} + +#[no_mangle] +fn bar() { } + +#[allow(dead_code)] +#[no_mangle] +fn baz() { } + +pub fn test() { + let lib = DynamicLibrary::open(None).unwrap(); + unsafe { + assert!(lib.symbol::("foo").is_ok()); + assert!(lib.symbol::("baz").is_err()); + assert!(lib.symbol::("bar").is_err()); + } +} diff --git a/src/test/run-pass-fulldeps/aux/lint_for_crate.rs b/src/test/run-pass-fulldeps/aux/lint_for_crate.rs new file mode 100644 index 00000000000..a424517da12 --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/lint_for_crate.rs @@ -0,0 +1,47 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![feature(plugin_registrar, rustc_private)] +#![feature(box_syntax)] + +#[macro_use] extern crate rustc; +extern crate rustc_plugin; +extern crate syntax; + +use rustc::lint::{LateContext, LintContext, LintPass, LateLintPass, LateLintPassObject, LintArray}; +use rustc_plugin::Registry; +use rustc::hir; +use syntax::attr; + +declare_lint!(CRATE_NOT_OKAY, Warn, "crate not marked with #![crate_okay]"); + +struct Pass; + +impl LintPass for Pass { + fn get_lints(&self) -> LintArray { + lint_array!(CRATE_NOT_OKAY) + } +} + +impl LateLintPass for Pass { + fn check_crate(&mut self, cx: &LateContext, krate: &hir::Crate) { + if !attr::contains_name(&krate.attrs, "crate_okay") { + cx.span_lint(CRATE_NOT_OKAY, krate.span, + "crate is not marked with #![crate_okay]"); + } + } +} + +#[plugin_registrar] +pub fn plugin_registrar(reg: &mut Registry) { + reg.register_late_lint_pass(box Pass as LateLintPassObject); +} diff --git a/src/test/run-pass-fulldeps/aux/lint_group_plugin_test.rs b/src/test/run-pass-fulldeps/aux/lint_group_plugin_test.rs new file mode 100644 index 00000000000..1e9a77724a8 --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/lint_group_plugin_test.rs @@ -0,0 +1,51 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![feature(plugin_registrar)] +#![feature(box_syntax, rustc_private)] + +// Load rustc as a plugin to get macros +#[macro_use] +extern crate rustc; +extern crate rustc_plugin; + +use rustc::hir; +use rustc::lint::{LateContext, LintContext, LintPass, LateLintPass, LateLintPassObject, LintArray}; +use rustc_plugin::Registry; + +declare_lint!(TEST_LINT, Warn, "Warn about items named 'lintme'"); + +declare_lint!(PLEASE_LINT, Warn, "Warn about items named 'pleaselintme'"); + +struct Pass; + +impl LintPass for Pass { + fn get_lints(&self) -> LintArray { + lint_array!(TEST_LINT, PLEASE_LINT) + } +} + +impl LateLintPass for Pass { + fn check_item(&mut self, cx: &LateContext, it: &hir::Item) { + match &*it.name.as_str() { + "lintme" => cx.span_lint(TEST_LINT, it.span, "item is named 'lintme'"), + "pleaselintme" => cx.span_lint(PLEASE_LINT, it.span, "item is named 'pleaselintme'"), + _ => {} + } + } +} + +#[plugin_registrar] +pub fn plugin_registrar(reg: &mut Registry) { + reg.register_late_lint_pass(box Pass as LateLintPassObject); + reg.register_lint_group("lint_me", vec![TEST_LINT, PLEASE_LINT]); +} diff --git a/src/test/run-pass-fulldeps/aux/lint_plugin_test.rs b/src/test/run-pass-fulldeps/aux/lint_plugin_test.rs new file mode 100644 index 00000000000..8ea131da338 --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/lint_plugin_test.rs @@ -0,0 +1,48 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![feature(plugin_registrar)] +#![feature(box_syntax, rustc_private)] + +extern crate syntax; + +// Load rustc as a plugin to get macros +#[macro_use] +extern crate rustc; +extern crate rustc_plugin; + +use rustc::lint::{EarlyContext, LintContext, LintPass, EarlyLintPass, + EarlyLintPassObject, LintArray}; +use rustc_plugin::Registry; +use syntax::ast; +declare_lint!(TEST_LINT, Warn, "Warn about items named 'lintme'"); + +struct Pass; + +impl LintPass for Pass { + fn get_lints(&self) -> LintArray { + lint_array!(TEST_LINT) + } +} + +impl EarlyLintPass for Pass { + fn check_item(&mut self, cx: &EarlyContext, it: &ast::Item) { + if it.ident.name.as_str() == "lintme" { + cx.span_lint(TEST_LINT, it.span, "item is named 'lintme'"); + } + } +} + +#[plugin_registrar] +pub fn plugin_registrar(reg: &mut Registry) { + reg.register_early_lint_pass(box Pass as EarlyLintPassObject); +} diff --git a/src/test/run-pass-fulldeps/aux/llvm_pass_plugin.rs b/src/test/run-pass-fulldeps/aux/llvm_pass_plugin.rs new file mode 100644 index 00000000000..59cfdd1e04a --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/llvm_pass_plugin.rs @@ -0,0 +1,29 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![feature(plugin_registrar)] +#![feature(rustc_private)] + +extern crate rustc; +extern crate rustc_plugin; + +use rustc_plugin::Registry; + +#[plugin_registrar] +pub fn plugin_registrar(reg: &mut Registry) { + // This pass is built in to LLVM. + // + // Normally, we would name a pass that was registered through + // C++ static object constructors in the same .so file as the + // plugin registrar. + reg.register_llvm_pass("gvn"); +} diff --git a/src/test/run-pass-fulldeps/aux/logging_right_crate.rs b/src/test/run-pass-fulldeps/aux/logging_right_crate.rs new file mode 100644 index 00000000000..db26b10fc67 --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/logging_right_crate.rs @@ -0,0 +1,18 @@ +// Copyright 2013-2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(rustc_private)] + +#[macro_use] extern crate log; + +pub fn foo() { + fn death() -> isize { panic!() } + debug!("{}", (||{ death() })()); +} diff --git a/src/test/run-pass-fulldeps/aux/lto-syntax-extension-lib.rs b/src/test/run-pass-fulldeps/aux/lto-syntax-extension-lib.rs new file mode 100644 index 00000000000..78c03bac33f --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/lto-syntax-extension-lib.rs @@ -0,0 +1,15 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +#![crate_type = "rlib"] + +pub fn foo() {} diff --git a/src/test/run-pass-fulldeps/aux/lto-syntax-extension-plugin.rs b/src/test/run-pass-fulldeps/aux/lto-syntax-extension-plugin.rs new file mode 100644 index 00000000000..9cf0d756f40 --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/lto-syntax-extension-plugin.rs @@ -0,0 +1,22 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![feature(plugin_registrar)] +#![feature(rustc_private)] + +extern crate rustc; +extern crate rustc_plugin; + +use rustc_plugin::Registry; + +#[plugin_registrar] +pub fn plugin_registrar(_reg: &mut Registry) {} diff --git a/src/test/run-pass-fulldeps/aux/macro_crate_test.rs b/src/test/run-pass-fulldeps/aux/macro_crate_test.rs new file mode 100644 index 00000000000..3516f566e8a --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/macro_crate_test.rs @@ -0,0 +1,141 @@ +// Copyright 2013-2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![feature(plugin_registrar, quote, rustc_private)] + +extern crate syntax; +extern crate rustc; +extern crate rustc_plugin; + +use syntax::ast::{self, TokenTree, Item, MetaItem, ImplItem, TraitItem, ItemKind}; +use syntax::codemap::Span; +use syntax::ext::base::*; +use syntax::parse::{self, token}; +use syntax::ptr::P; +use rustc_plugin::Registry; + +#[macro_export] +macro_rules! exported_macro { () => (2) } +macro_rules! unexported_macro { () => (3) } + +#[plugin_registrar] +pub fn plugin_registrar(reg: &mut Registry) { + reg.register_macro("make_a_1", expand_make_a_1); + reg.register_macro("identity", expand_identity); + reg.register_syntax_extension( + token::intern("into_multi_foo"), + // FIXME (#22405): Replace `Box::new` with `box` here when/if possible. + MultiModifier(Box::new(expand_into_foo_multi))); + reg.register_syntax_extension( + token::intern("duplicate"), + // FIXME (#22405): Replace `Box::new` with `box` here when/if possible. + MultiDecorator(Box::new(expand_duplicate))); +} + +fn expand_make_a_1(cx: &mut ExtCtxt, sp: Span, tts: &[TokenTree]) + -> Box { + if !tts.is_empty() { + cx.span_fatal(sp, "make_a_1 takes no arguments"); + } + MacEager::expr(quote_expr!(cx, 1)) +} + +// See Issue #15750 +fn expand_identity(cx: &mut ExtCtxt, _span: Span, tts: &[TokenTree]) + -> Box { + // Parse an expression and emit it unchanged. + let mut parser = parse::new_parser_from_tts(cx.parse_sess(), + cx.cfg(), tts.to_vec()); + let expr = parser.parse_expr().unwrap(); + MacEager::expr(quote_expr!(&mut *cx, $expr)) +} + +fn expand_into_foo_multi(cx: &mut ExtCtxt, + sp: Span, + attr: &MetaItem, + it: Annotatable) -> Annotatable { + match it { + Annotatable::Item(it) => { + Annotatable::Item(P(Item { + attrs: it.attrs.clone(), + ..(*quote_item!(cx, enum Foo2 { Bar2, Baz2 }).unwrap()).clone() + })) + } + Annotatable::ImplItem(it) => { + quote_item!(cx, impl X { fn foo(&self) -> i32 { 42 } }).unwrap().and_then(|i| { + match i.node { + ItemKind::Impl(_, _, _, _, _, mut items) => { + Annotatable::ImplItem(P(items.pop().expect("impl method not found"))) + } + _ => unreachable!("impl parsed to something other than impl") + } + }) + } + Annotatable::TraitItem(it) => { + quote_item!(cx, trait X { fn foo(&self) -> i32 { 0 } }).unwrap().and_then(|i| { + match i.node { + ItemKind::Trait(_, _, _, mut items) => { + Annotatable::TraitItem(P(items.pop().expect("trait method not found"))) + } + _ => unreachable!("trait parsed to something other than trait") + } + }) + } + } +} + +// Create a duplicate of the annotatable, based on the MetaItem +fn expand_duplicate(cx: &mut ExtCtxt, + sp: Span, + mi: &MetaItem, + it: &Annotatable, + push: &mut FnMut(Annotatable)) +{ + let copy_name = match mi.node { + ast::MetaItemKind::List(_, ref xs) => { + if let ast::MetaItemKind::Word(ref w) = xs[0].node { + token::str_to_ident(&w) + } else { + cx.span_err(mi.span, "Expected word"); + return; + } + } + _ => { + cx.span_err(mi.span, "Expected list"); + return; + } + }; + + // Duplicate the item but replace its ident by the MetaItem + match it.clone() { + Annotatable::Item(it) => { + let mut new_it = (*it).clone(); + new_it.attrs.clear(); + new_it.ident = copy_name; + push(Annotatable::Item(P(new_it))); + } + Annotatable::ImplItem(it) => { + let mut new_it = (*it).clone(); + new_it.attrs.clear(); + new_it.ident = copy_name; + push(Annotatable::ImplItem(P(new_it))); + } + Annotatable::TraitItem(tt) => { + let mut new_it = (*tt).clone(); + new_it.attrs.clear(); + new_it.ident = copy_name; + push(Annotatable::TraitItem(P(new_it))); + } + } +} + +pub fn foo() {} diff --git a/src/test/run-pass-fulldeps/aux/plugin_args.rs b/src/test/run-pass-fulldeps/aux/plugin_args.rs new file mode 100644 index 00000000000..f6e80266a15 --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/plugin_args.rs @@ -0,0 +1,52 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![feature(plugin_registrar)] +#![feature(box_syntax, rustc_private)] + +extern crate syntax; +extern crate rustc; +extern crate rustc_plugin; + +use std::borrow::ToOwned; +use syntax::ast; +use syntax::codemap::Span; +use syntax::ext::build::AstBuilder; +use syntax::ext::base::{TTMacroExpander, ExtCtxt, MacResult, MacEager, NormalTT}; +use syntax::parse::token; +use syntax::print::pprust; +use syntax::ptr::P; +use rustc_plugin::Registry; + +struct Expander { + args: Vec>, +} + +impl TTMacroExpander for Expander { + fn expand<'cx>(&self, + ecx: &'cx mut ExtCtxt, + sp: Span, + _: &[ast::TokenTree]) -> Box { + let args = self.args.iter().map(|i| pprust::meta_item_to_string(&*i)) + .collect::>().join(", "); + let interned = token::intern_and_get_ident(&args[..]); + MacEager::expr(ecx.expr_str(sp, interned)) + } +} + +#[plugin_registrar] +pub fn plugin_registrar(reg: &mut Registry) { + let args = reg.args().clone(); + reg.register_syntax_extension(token::intern("plugin_args"), + // FIXME (#22405): Replace `Box::new` with `box` here when/if possible. + NormalTT(Box::new(Expander { args: args, }), None, false)); +} diff --git a/src/test/run-pass-fulldeps/aux/plugin_crate_outlive_expansion_phase.rs b/src/test/run-pass-fulldeps/aux/plugin_crate_outlive_expansion_phase.rs new file mode 100644 index 00000000000..f56983c14b1 --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/plugin_crate_outlive_expansion_phase.rs @@ -0,0 +1,35 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![feature(plugin_registrar)] +#![feature(box_syntax, rustc_private)] + +extern crate rustc; +extern crate rustc_plugin; + +use std::any::Any; +use std::cell::RefCell; +use rustc_plugin::Registry; + +struct Foo { + foo: isize +} + +impl Drop for Foo { + fn drop(&mut self) {} +} + +#[plugin_registrar] +pub fn registrar(_: &mut Registry) { + thread_local!(static FOO: RefCell>> = RefCell::new(None)); + FOO.with(|s| *s.borrow_mut() = Some(box Foo { foo: 10 } as Box)); +} diff --git a/src/test/run-pass-fulldeps/aux/plugin_with_plugin_lib.rs b/src/test/run-pass-fulldeps/aux/plugin_with_plugin_lib.rs new file mode 100644 index 00000000000..8b5ff7cf07c --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/plugin_with_plugin_lib.rs @@ -0,0 +1,23 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![feature(plugin_registrar, rustc_private)] +#![deny(plugin_as_library)] // should have no effect in a plugin crate + +extern crate macro_crate_test; +extern crate rustc; +extern crate rustc_plugin; + +use rustc_plugin::Registry; + +#[plugin_registrar] +pub fn plugin_registrar(_: &mut Registry) { } diff --git a/src/test/run-pass-fulldeps/aux/procedural_mbe_matching.rs b/src/test/run-pass-fulldeps/aux/procedural_mbe_matching.rs new file mode 100644 index 00000000000..713a7d1e811 --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/procedural_mbe_matching.rs @@ -0,0 +1,70 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![crate_type="dylib"] +#![feature(plugin_registrar, quote, rustc_private)] + +extern crate syntax; +extern crate rustc; +extern crate rustc_plugin; + +use syntax::codemap::Span; +use syntax::parse::token::{self, str_to_ident, NtExpr, NtPat}; +use syntax::ast::{TokenTree, Pat}; +use syntax::ext::base::{ExtCtxt, MacResult, DummyResult, MacEager}; +use syntax::ext::build::AstBuilder; +use syntax::ext::tt::macro_parser::{MatchedSeq, MatchedNonterminal}; +use syntax::ext::tt::macro_parser::{Success, Failure, Error}; +use syntax::ptr::P; +use rustc_plugin::Registry; + +fn expand_mbe_matches(cx: &mut ExtCtxt, sp: Span, args: &[TokenTree]) + -> Box { + + let mbe_matcher = quote_matcher!(cx, $matched:expr, $($pat:pat)|+); + + let mac_expr = match TokenTree::parse(cx, &mbe_matcher[..], args) { + Success(map) => { + match (&*map[&str_to_ident("matched").name], &*map[&str_to_ident("pat").name]) { + (&MatchedNonterminal(NtExpr(ref matched_expr)), + &MatchedSeq(ref pats, seq_sp)) => { + let pats: Vec> = pats.iter().map(|pat_nt| + if let &MatchedNonterminal(NtPat(ref pat)) = &**pat_nt { + pat.clone() + } else { + unreachable!() + } + ).collect(); + let arm = cx.arm(seq_sp, pats, cx.expr_bool(seq_sp, true)); + + quote_expr!(cx, + match $matched_expr { + $arm + _ => false + } + ) + } + _ => unreachable!() + } + } + Failure(_, s) | Error(_, s) => { + panic!("expected Success, but got Error/Failure: {}", s); + } + }; + + MacEager::expr(mac_expr) +} + +#[plugin_registrar] +pub fn plugin_registrar(reg: &mut Registry) { + reg.register_macro("matches", expand_mbe_matches); +} diff --git a/src/test/run-pass-fulldeps/aux/roman_numerals.rs b/src/test/run-pass-fulldeps/aux/roman_numerals.rs new file mode 100644 index 00000000000..839ece49c3e --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/roman_numerals.rs @@ -0,0 +1,79 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![crate_type="dylib"] +#![feature(plugin_registrar, rustc_private)] +#![feature(slice_patterns)] + +extern crate syntax; +extern crate rustc; +extern crate rustc_plugin; + +use syntax::codemap::Span; +use syntax::ast::TokenTree; +use syntax::parse::token; +use syntax::ext::base::{ExtCtxt, MacResult, DummyResult, MacEager}; +use syntax::ext::build::AstBuilder; // trait for expr_usize +use rustc_plugin::Registry; + +// WARNING WARNING WARNING WARNING WARNING +// ======================================= +// +// This code also appears in src/doc/guide-plugin.md. Please keep +// the two copies in sync! FIXME: have rustdoc read this file + +fn expand_rn(cx: &mut ExtCtxt, sp: Span, args: &[TokenTree]) + -> Box { + + static NUMERALS: &'static [(&'static str, usize)] = &[ + ("M", 1000), ("CM", 900), ("D", 500), ("CD", 400), + ("C", 100), ("XC", 90), ("L", 50), ("XL", 40), + ("X", 10), ("IX", 9), ("V", 5), ("IV", 4), + ("I", 1)]; + + if args.len() != 1 { + cx.span_err( + sp, + &format!("argument should be a single identifier, but got {} arguments", args.len())); + return DummyResult::any(sp); + } + + let text = match args[0] { + TokenTree::Token(_, token::Ident(s)) => s.to_string(), + _ => { + cx.span_err(sp, "argument should be a single identifier"); + return DummyResult::any(sp); + } + }; + + let mut text = &*text; + let mut total = 0; + while !text.is_empty() { + match NUMERALS.iter().find(|&&(rn, _)| text.starts_with(rn)) { + Some(&(rn, val)) => { + total += val; + text = &text[rn.len()..]; + } + None => { + cx.span_err(sp, "invalid Roman numeral"); + return DummyResult::any(sp); + } + } + } + + MacEager::expr(cx.expr_usize(sp, total)) +} + +#[plugin_registrar] +pub fn plugin_registrar(reg: &mut Registry) { + reg.register_macro("rn", expand_rn); +} diff --git a/src/test/run-pass-fulldeps/aux/syntax_extension_with_dll_deps_1.rs b/src/test/run-pass-fulldeps/aux/syntax_extension_with_dll_deps_1.rs new file mode 100644 index 00000000000..fadeb024405 --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/syntax_extension_with_dll_deps_1.rs @@ -0,0 +1,17 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![crate_type = "dylib"] + +pub fn the_answer() -> isize { + 2 +} diff --git a/src/test/run-pass-fulldeps/aux/syntax_extension_with_dll_deps_2.rs b/src/test/run-pass-fulldeps/aux/syntax_extension_with_dll_deps_2.rs new file mode 100644 index 00000000000..7281698a7fb --- /dev/null +++ b/src/test/run-pass-fulldeps/aux/syntax_extension_with_dll_deps_2.rs @@ -0,0 +1,35 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// force-host + +#![crate_type = "dylib"] +#![feature(plugin_registrar, quote, rustc_private)] + +extern crate syntax_extension_with_dll_deps_1 as other; +extern crate syntax; +extern crate rustc; +extern crate rustc_plugin; + +use syntax::ast::{TokenTree, Item, MetaItem}; +use syntax::codemap::Span; +use syntax::ext::base::*; +use rustc_plugin::Registry; + +#[plugin_registrar] +pub fn plugin_registrar(reg: &mut Registry) { + reg.register_macro("foo", expand_foo); +} + +fn expand_foo(cx: &mut ExtCtxt, sp: Span, tts: &[TokenTree]) + -> Box { + let answer = other::the_answer(); + MacEager::expr(quote_expr!(cx, $answer)) +} diff --git a/src/test/run-pass/aux/allocator-dummy.rs b/src/test/run-pass/aux/allocator-dummy.rs new file mode 100644 index 00000000000..a1d21db8f4d --- /dev/null +++ b/src/test/run-pass/aux/allocator-dummy.rs @@ -0,0 +1,55 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +#![feature(allocator, core_intrinsics, libc)] +#![allocator] +#![crate_type = "rlib"] +#![no_std] + +extern crate libc; + +pub static mut HITS: usize = 0; + +#[no_mangle] +pub extern fn __rust_allocate(size: usize, align: usize) -> *mut u8 { + unsafe { + HITS += 1; + libc::malloc(size as libc::size_t) as *mut u8 + } +} + +#[no_mangle] +pub extern fn __rust_deallocate(ptr: *mut u8, old_size: usize, align: usize) { + unsafe { + HITS += 1; + libc::free(ptr as *mut _) + } +} + +#[no_mangle] +pub extern fn __rust_reallocate(ptr: *mut u8, old_size: usize, size: usize, + align: usize) -> *mut u8 { + unsafe { + libc::realloc(ptr as *mut _, size as libc::size_t) as *mut u8 + } +} + +#[no_mangle] +pub extern fn __rust_reallocate_inplace(ptr: *mut u8, old_size: usize, + size: usize, align: usize) -> usize { + unsafe { core::intrinsics::abort() } +} + +#[no_mangle] +pub extern fn __rust_usable_size(size: usize, align: usize) -> usize { + unsafe { core::intrinsics::abort() } +} diff --git a/src/test/run-pass/aux/anon-extern-mod-cross-crate-1.rs b/src/test/run-pass/aux/anon-extern-mod-cross-crate-1.rs new file mode 100644 index 00000000000..197fb9a6d01 --- /dev/null +++ b/src/test/run-pass/aux/anon-extern-mod-cross-crate-1.rs @@ -0,0 +1,19 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="anonexternmod"] +#![feature(libc)] + +extern crate libc; + +#[link(name="rust_test_helpers")] +extern { + pub fn rust_get_test_int() -> libc::intptr_t; +} diff --git a/src/test/run-pass/aux/anon_trait_static_method_lib.rs b/src/test/run-pass/aux/anon_trait_static_method_lib.rs new file mode 100644 index 00000000000..9d93d9689e7 --- /dev/null +++ b/src/test/run-pass/aux/anon_trait_static_method_lib.rs @@ -0,0 +1,19 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct Foo { + pub x: isize +} + +impl Foo { + pub fn new() -> Foo { + Foo { x: 3 } + } +} diff --git a/src/test/run-pass/aux/associated-const-cc-lib.rs b/src/test/run-pass/aux/associated-const-cc-lib.rs new file mode 100644 index 00000000000..1fd8fee0117 --- /dev/null +++ b/src/test/run-pass/aux/associated-const-cc-lib.rs @@ -0,0 +1,46 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(associated_consts)] + +#![crate_type="lib"] + +// These items are for testing that associated consts work cross-crate. +pub trait Foo { + const BAR: usize; +} + +pub struct FooNoDefault; + +impl Foo for FooNoDefault { + const BAR: usize = 0; +} + +// These test that defaults and default resolution work cross-crate. +pub trait FooDefault { + const BAR: usize = 1; +} + +pub struct FooOverwriteDefault; + +impl FooDefault for FooOverwriteDefault { + const BAR: usize = 2; +} + +pub struct FooUseDefault; + +impl FooDefault for FooUseDefault {} + +// Test inherent impls. +pub struct InherentBar; + +impl InherentBar { + pub const BAR: usize = 3; +} diff --git a/src/test/run-pass/aux/associated-types-cc-lib.rs b/src/test/run-pass/aux/associated-types-cc-lib.rs new file mode 100644 index 00000000000..175e8730cbc --- /dev/null +++ b/src/test/run-pass/aux/associated-types-cc-lib.rs @@ -0,0 +1,26 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Helper for test issue-18048, which tests associated types in a +// cross-crate scenario. + +#![crate_type="lib"] + +pub trait Bar: Sized { + type T; + + fn get(x: Option) -> ::T; +} + +impl Bar for isize { + type T = usize; + + fn get(_: Option) -> usize { 22 } +} diff --git a/src/test/run-pass/aux/augmented_assignments.rs b/src/test/run-pass/aux/augmented_assignments.rs new file mode 100644 index 00000000000..6601e7240a7 --- /dev/null +++ b/src/test/run-pass/aux/augmented_assignments.rs @@ -0,0 +1,18 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use std::ops::AddAssign; + +pub struct Int(pub i32); + +impl AddAssign for Int { + fn add_assign(&mut self, _: i32) { + } +} diff --git a/src/test/run-pass/aux/blind-item-mixed-crate-use-item-foo.rs b/src/test/run-pass/aux/blind-item-mixed-crate-use-item-foo.rs new file mode 100644 index 00000000000..f129b4b77bb --- /dev/null +++ b/src/test/run-pass/aux/blind-item-mixed-crate-use-item-foo.rs @@ -0,0 +1,13 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] + +pub const X: () = (); diff --git a/src/test/run-pass/aux/blind-item-mixed-crate-use-item-foo2.rs b/src/test/run-pass/aux/blind-item-mixed-crate-use-item-foo2.rs new file mode 100644 index 00000000000..91fa9124551 --- /dev/null +++ b/src/test/run-pass/aux/blind-item-mixed-crate-use-item-foo2.rs @@ -0,0 +1,13 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] + +pub const Y: () = (); diff --git a/src/test/run-pass/aux/cci_borrow_lib.rs b/src/test/run-pass/aux/cci_borrow_lib.rs new file mode 100644 index 00000000000..9c90510a857 --- /dev/null +++ b/src/test/run-pass/aux/cci_borrow_lib.rs @@ -0,0 +1,13 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn foo(x: &usize) -> usize { + *x +} diff --git a/src/test/run-pass/aux/cci_capture_clause.rs b/src/test/run-pass/aux/cci_capture_clause.rs new file mode 100644 index 00000000000..b38e955231e --- /dev/null +++ b/src/test/run-pass/aux/cci_capture_clause.rs @@ -0,0 +1,20 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use std::thread; +use std::sync::mpsc::{Receiver, channel}; + +pub fn foo(x: T) -> Receiver { + let (tx, rx) = channel(); + thread::spawn(move|| { + tx.send(x.clone()); + }); + rx +} diff --git a/src/test/run-pass/aux/cci_class.rs b/src/test/run-pass/aux/cci_class.rs new file mode 100644 index 00000000000..08a13fd8bcc --- /dev/null +++ b/src/test/run-pass/aux/cci_class.rs @@ -0,0 +1,24 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub mod kitties { + pub struct cat { + meows : usize, + + pub how_hungry : isize, + } + + pub fn cat(in_x : usize, in_y : isize) -> cat { + cat { + meows: in_x, + how_hungry: in_y + } + } +} diff --git a/src/test/run-pass/aux/cci_class_2.rs b/src/test/run-pass/aux/cci_class_2.rs new file mode 100644 index 00000000000..7d147832f09 --- /dev/null +++ b/src/test/run-pass/aux/cci_class_2.rs @@ -0,0 +1,29 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub mod kitties { + pub struct cat { + meows : usize, + + pub how_hungry : isize, + + } + + impl cat { + pub fn speak(&self) {} + } + + pub fn cat(in_x : usize, in_y : isize) -> cat { + cat { + meows: in_x, + how_hungry: in_y + } + } +} diff --git a/src/test/run-pass/aux/cci_class_3.rs b/src/test/run-pass/aux/cci_class_3.rs new file mode 100644 index 00000000000..ec1bf108dcb --- /dev/null +++ b/src/test/run-pass/aux/cci_class_3.rs @@ -0,0 +1,29 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub mod kitties { + pub struct cat { + meows : usize, + + pub how_hungry : isize, + } + + impl cat { + pub fn speak(&mut self) { self.meows += 1; } + pub fn meow_count(&mut self) -> usize { self.meows } + } + + pub fn cat(in_x : usize, in_y : isize) -> cat { + cat { + meows: in_x, + how_hungry: in_y + } + } +} diff --git a/src/test/run-pass/aux/cci_class_4.rs b/src/test/run-pass/aux/cci_class_4.rs new file mode 100644 index 00000000000..300cc31632e --- /dev/null +++ b/src/test/run-pass/aux/cci_class_4.rs @@ -0,0 +1,51 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub mod kitties { + pub struct cat { + meows : usize, + + pub how_hungry : isize, + pub name : String, + } + + impl cat { + pub fn speak(&mut self) { self.meow(); } + + pub fn eat(&mut self) -> bool { + if self.how_hungry > 0 { + println!("OM NOM NOM"); + self.how_hungry -= 2; + return true; + } else { + println!("Not hungry!"); + return false; + } + } + } + + impl cat { + pub fn meow(&mut self) { + println!("Meow"); + self.meows += 1; + if self.meows % 5 == 0 { + self.how_hungry += 1; + } + } + } + + pub fn cat(in_x : usize, in_y : isize, in_name: String) -> cat { + cat { + meows: in_x, + how_hungry: in_y, + name: in_name + } + } +} diff --git a/src/test/run-pass/aux/cci_class_6.rs b/src/test/run-pass/aux/cci_class_6.rs new file mode 100644 index 00000000000..c902a6c7dca --- /dev/null +++ b/src/test/run-pass/aux/cci_class_6.rs @@ -0,0 +1,35 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub mod kitties { + + pub struct cat { + info : Vec , + meows : usize, + + pub how_hungry : isize, + } + + impl cat { + pub fn speak(&mut self, stuff: Vec ) { + self.meows += stuff.len(); + } + + pub fn meow_count(&mut self) -> usize { self.meows } + } + + pub fn cat(in_x : usize, in_y : isize, in_info: Vec ) -> cat { + cat { + meows: in_x, + how_hungry: in_y, + info: in_info + } + } +} diff --git a/src/test/run-pass/aux/cci_class_cast.rs b/src/test/run-pass/aux/cci_class_cast.rs new file mode 100644 index 00000000000..f54a39d61ef --- /dev/null +++ b/src/test/run-pass/aux/cci_class_cast.rs @@ -0,0 +1,60 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub mod kitty { + use std::fmt; + + pub struct cat { + meows : usize, + pub how_hungry : isize, + pub name : String, + } + + impl fmt::Display for cat { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}", self.name) + } + } + + impl cat { + fn meow(&mut self) { + println!("Meow"); + self.meows += 1; + if self.meows % 5 == 0 { + self.how_hungry += 1; + } + } + + } + + impl cat { + pub fn speak(&mut self) { self.meow(); } + + pub fn eat(&mut self) -> bool { + if self.how_hungry > 0 { + println!("OM NOM NOM"); + self.how_hungry -= 2; + return true; + } + else { + println!("Not hungry!"); + return false; + } + } + } + + pub fn cat(in_x : usize, in_y : isize, in_name: String) -> cat { + cat { + meows: in_x, + how_hungry: in_y, + name: in_name + } + } +} diff --git a/src/test/run-pass/aux/cci_class_trait.rs b/src/test/run-pass/aux/cci_class_trait.rs new file mode 100644 index 00000000000..7ca3d7c4ac9 --- /dev/null +++ b/src/test/run-pass/aux/cci_class_trait.rs @@ -0,0 +1,15 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub mod animals { + pub trait noisy { + fn speak(&mut self); + } +} diff --git a/src/test/run-pass/aux/cci_const.rs b/src/test/run-pass/aux/cci_const.rs new file mode 100644 index 00000000000..ee8290050f9 --- /dev/null +++ b/src/test/run-pass/aux/cci_const.rs @@ -0,0 +1,16 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub extern fn bar() { +} + +pub const foopy: &'static str = "hi there"; +pub const uint_val: usize = 12; +pub const uint_expr: usize = (1 << uint_val) - 1; diff --git a/src/test/run-pass/aux/cci_const_block.rs b/src/test/run-pass/aux/cci_const_block.rs new file mode 100644 index 00000000000..76fe9fe5aa4 --- /dev/null +++ b/src/test/run-pass/aux/cci_const_block.rs @@ -0,0 +1,16 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub static BLOCK_FN_DEF: fn(usize) -> usize = { + fn foo(a: usize) -> usize { + a + 10 + } + foo +}; diff --git a/src/test/run-pass/aux/cci_impl_lib.rs b/src/test/run-pass/aux/cci_impl_lib.rs new file mode 100644 index 00000000000..d8921f4e09a --- /dev/null +++ b/src/test/run-pass/aux/cci_impl_lib.rs @@ -0,0 +1,26 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="cci_impl_lib"] + +pub trait uint_helpers { + fn to(&self, v: usize, f: F) where F: FnMut(usize); +} + +impl uint_helpers for usize { + #[inline] + fn to(&self, v: usize, mut f: F) where F: FnMut(usize) { + let mut i = *self; + while i < v { + f(i); + i += 1; + } + } +} diff --git a/src/test/run-pass/aux/cci_intrinsic.rs b/src/test/run-pass/aux/cci_intrinsic.rs new file mode 100644 index 00000000000..b6e69d29f70 --- /dev/null +++ b/src/test/run-pass/aux/cci_intrinsic.rs @@ -0,0 +1,24 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(intrinsics)] + +pub mod rusti { + extern "rust-intrinsic" { + pub fn atomic_xchg(dst: *mut T, src: T) -> T; + } +} + +#[inline(always)] +pub fn atomic_xchg(dst: *mut isize, src: isize) -> isize { + unsafe { + rusti::atomic_xchg(dst, src) + } +} diff --git a/src/test/run-pass/aux/cci_iter_lib.rs b/src/test/run-pass/aux/cci_iter_lib.rs new file mode 100644 index 00000000000..07d03b4c759 --- /dev/null +++ b/src/test/run-pass/aux/cci_iter_lib.rs @@ -0,0 +1,21 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="cci_iter_lib"] + +#[inline] +pub fn iter(v: &[T], mut f: F) where F: FnMut(&T) { + let mut i = 0; + let n = v.len(); + while i < n { + f(&v[i]); + i += 1; + } +} diff --git a/src/test/run-pass/aux/cci_nested_lib.rs b/src/test/run-pass/aux/cci_nested_lib.rs new file mode 100644 index 00000000000..8c1a283a72d --- /dev/null +++ b/src/test/run-pass/aux/cci_nested_lib.rs @@ -0,0 +1,63 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![allow(unknown_features)] +#![feature(box_syntax)] + +use std::cell::RefCell; + +pub struct Entry { + key: A, + value: B +} + +pub struct alist { + eq_fn: extern "Rust" fn(A,A) -> bool, + data: Box>>>, +} + +pub fn alist_add(lst: &alist, k: A, v: B) { + let mut data = lst.data.borrow_mut(); + (*data).push(Entry{key:k, value:v}); +} + +pub fn alist_get( + lst: &alist, + k: A) + -> B { + let eq_fn = lst.eq_fn; + let data = lst.data.borrow(); + for entry in &(*data) { + if eq_fn(entry.key.clone(), k.clone()) { + return entry.value.clone(); + } + } + panic!(); +} + +#[inline] +pub fn new_int_alist() -> alist { + fn eq_int(a: isize, b: isize) -> bool { a == b } + return alist { + eq_fn: eq_int, + data: box RefCell::new(Vec::new()), + }; +} + +#[inline] +pub fn new_int_alist_2() -> alist { + #[inline] + fn eq_int(a: isize, b: isize) -> bool { a == b } + return alist { + eq_fn: eq_int, + data: box RefCell::new(Vec::new()), + }; +} diff --git a/src/test/run-pass/aux/cci_no_inline_lib.rs b/src/test/run-pass/aux/cci_no_inline_lib.rs new file mode 100644 index 00000000000..4c6f808c619 --- /dev/null +++ b/src/test/run-pass/aux/cci_no_inline_lib.rs @@ -0,0 +1,22 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="cci_no_inline_lib"] + + +// same as cci_iter_lib, more-or-less, but not marked inline +pub fn iter(v: Vec , mut f: F) where F: FnMut(usize) { + let mut i = 0; + let n = v.len(); + while i < n { + f(v[i]); + i += 1; + } +} diff --git a/src/test/run-pass/aux/cfg_inner_static.rs b/src/test/run-pass/aux/cfg_inner_static.rs new file mode 100644 index 00000000000..b5b4390657b --- /dev/null +++ b/src/test/run-pass/aux/cfg_inner_static.rs @@ -0,0 +1,17 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// this used to just ICE on compiling +pub fn foo() { + if cfg!(foo) { + static a: isize = 3; + a + } else { 3 }; +} diff --git a/src/test/run-pass/aux/cgu_test.rs b/src/test/run-pass/aux/cgu_test.rs new file mode 100644 index 00000000000..7c88d3d37e3 --- /dev/null +++ b/src/test/run-pass/aux/cgu_test.rs @@ -0,0 +1,16 @@ +// Copyright 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic +// compile-flags: --crate-type=lib + +pub fn id(t: T) -> T { + t +} diff --git a/src/test/run-pass/aux/cgu_test_a.rs b/src/test/run-pass/aux/cgu_test_a.rs new file mode 100644 index 00000000000..0f0d1cd87e1 --- /dev/null +++ b/src/test/run-pass/aux/cgu_test_a.rs @@ -0,0 +1,25 @@ +// Copyright 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic +// compile-flags: -Ccodegen-units=2 --crate-type=lib + +extern crate cgu_test; + +pub mod a { + pub fn a() { + ::cgu_test::id(0); + } +} +pub mod b { + pub fn a() { + ::cgu_test::id(0); + } +} diff --git a/src/test/run-pass/aux/cgu_test_b.rs b/src/test/run-pass/aux/cgu_test_b.rs new file mode 100644 index 00000000000..0f0d1cd87e1 --- /dev/null +++ b/src/test/run-pass/aux/cgu_test_b.rs @@ -0,0 +1,25 @@ +// Copyright 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic +// compile-flags: -Ccodegen-units=2 --crate-type=lib + +extern crate cgu_test; + +pub mod a { + pub fn a() { + ::cgu_test::id(0); + } +} +pub mod b { + pub fn a() { + ::cgu_test::id(0); + } +} diff --git a/src/test/run-pass/aux/check_static_recursion_foreign_helper.rs b/src/test/run-pass/aux/check_static_recursion_foreign_helper.rs new file mode 100644 index 00000000000..c0d81cd8e1b --- /dev/null +++ b/src/test/run-pass/aux/check_static_recursion_foreign_helper.rs @@ -0,0 +1,21 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Helper definition for test/run-pass/check-static-recursion-foreign.rs. + +#![feature(libc)] + +#[crate_id = "check_static_recursion_foreign_helper"] +#[crate_type = "lib"] + +extern crate libc; + +#[no_mangle] +pub static test_static: libc::c_int = 0; diff --git a/src/test/run-pass/aux/coherence_copy_like_lib.rs b/src/test/run-pass/aux/coherence_copy_like_lib.rs new file mode 100644 index 00000000000..d3d389c6a8b --- /dev/null +++ b/src/test/run-pass/aux/coherence_copy_like_lib.rs @@ -0,0 +1,20 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "rlib"] +#![feature(fundamental)] + +pub trait MyCopy { } +impl MyCopy for i32 { } + +pub struct MyStruct(T); + +#[fundamental] +pub struct MyFundamentalStruct(T); diff --git a/src/test/run-pass/aux/coherence_lib.rs b/src/test/run-pass/aux/coherence_lib.rs new file mode 100644 index 00000000000..daa123849e4 --- /dev/null +++ b/src/test/run-pass/aux/coherence_lib.rs @@ -0,0 +1,25 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] + +pub trait Remote { + fn foo(&self) { } +} + +pub trait Remote1 { + fn foo(&self, t: T) { } +} + +pub trait Remote2 { + fn foo(&self, t: T, u: U) { } +} + +pub struct Pair(T,U); diff --git a/src/test/run-pass/aux/const_fn_lib.rs b/src/test/run-pass/aux/const_fn_lib.rs new file mode 100644 index 00000000000..b0d5a6b1272 --- /dev/null +++ b/src/test/run-pass/aux/const_fn_lib.rs @@ -0,0 +1,16 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Crate that exports a const fn. Used for testing cross-crate. + +#![crate_type="rlib"] +#![feature(const_fn)] + +pub const fn foo() -> usize { 22 } //~ ERROR const fn is unstable diff --git a/src/test/run-pass/aux/crate-attributes-using-cfg_attr.rs b/src/test/run-pass/aux/crate-attributes-using-cfg_attr.rs new file mode 100644 index 00000000000..0028b51f9d1 --- /dev/null +++ b/src/test/run-pass/aux/crate-attributes-using-cfg_attr.rs @@ -0,0 +1,16 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic +// compile-flags: --cfg foo + +#![cfg_attr(foo, crate_type="lib")] + +pub fn foo() {} diff --git a/src/test/run-pass/aux/crate-method-reexport-grrrrrrr2.rs b/src/test/run-pass/aux/crate-method-reexport-grrrrrrr2.rs new file mode 100644 index 00000000000..f3d5bf2d65e --- /dev/null +++ b/src/test/run-pass/aux/crate-method-reexport-grrrrrrr2.rs @@ -0,0 +1,41 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="crate_method_reexport_grrrrrrr2"] + +pub use name_pool::add; + +pub mod name_pool { + pub type name_pool = (); + + pub trait add { + fn add(&self, s: String); + } + + impl add for name_pool { + fn add(&self, _s: String) { + } + } +} + +pub mod rust { + pub use name_pool::add; + + pub type rt = Box<()>; + + pub trait cx { + fn cx(&self); + } + + impl cx for rt { + fn cx(&self) { + } + } +} diff --git a/src/test/run-pass/aux/default_type_params_xc.rs b/src/test/run-pass/aux/default_type_params_xc.rs new file mode 100644 index 00000000000..fe852e5d8ea --- /dev/null +++ b/src/test/run-pass/aux/default_type_params_xc.rs @@ -0,0 +1,15 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct Heap; + +pub struct FakeHeap; + +pub struct FakeVec { pub f: Option<(T,A)> } diff --git a/src/test/run-pass/aux/derive-no-std.rs b/src/test/run-pass/aux/derive-no-std.rs new file mode 100644 index 00000000000..f083e10bfdb --- /dev/null +++ b/src/test/run-pass/aux/derive-no-std.rs @@ -0,0 +1,40 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +#![crate_type = "rlib"] +#![no_std] + +// Issue #16803 + +#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord, + Debug, Default, Copy)] +pub struct Foo { + pub x: u32, +} + +#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord, + Debug, Copy)] +pub enum Bar { + Qux, + Quux(u32), +} + +#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord, + Debug, Copy)] +pub enum Void {} +#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord, + Debug, Copy)] +pub struct Empty; +#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord, + Debug, Copy)] +pub struct AlsoEmpty {} + diff --git a/src/test/run-pass/aux/empty-struct.rs b/src/test/run-pass/aux/empty-struct.rs new file mode 100644 index 00000000000..22f65c2b0d8 --- /dev/null +++ b/src/test/run-pass/aux/empty-struct.rs @@ -0,0 +1,17 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct XEmpty1 {} +pub struct XEmpty2; + +pub enum XE { + XEmpty3 {}, + XEmpty4, +} diff --git a/src/test/run-pass/aux/explicit_self_xcrate.rs b/src/test/run-pass/aux/explicit_self_xcrate.rs new file mode 100644 index 00000000000..dafa66d9286 --- /dev/null +++ b/src/test/run-pass/aux/explicit_self_xcrate.rs @@ -0,0 +1,25 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub trait Foo { + #[inline(always)] + fn f(&self); +} + +pub struct Bar { + pub x: String +} + +impl Foo for Bar { + #[inline(always)] + fn f(&self) { + println!("{}", (*self).x); + } +} diff --git a/src/test/run-pass/aux/extern-crosscrate-source.rs b/src/test/run-pass/aux/extern-crosscrate-source.rs new file mode 100644 index 00000000000..fc2e328f686 --- /dev/null +++ b/src/test/run-pass/aux/extern-crosscrate-source.rs @@ -0,0 +1,41 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="externcallback"] +#![crate_type = "lib"] +#![feature(libc)] + +extern crate libc; + +pub mod rustrt { + extern crate libc; + + #[link(name = "rust_test_helpers")] + extern { + pub fn rust_dbg_call(cb: extern "C" fn(libc::uintptr_t) -> libc::uintptr_t, + data: libc::uintptr_t) + -> libc::uintptr_t; + } +} + +pub fn fact(n: libc::uintptr_t) -> libc::uintptr_t { + unsafe { + println!("n = {}", n); + rustrt::rust_dbg_call(cb, n) + } +} + +pub extern fn cb(data: libc::uintptr_t) -> libc::uintptr_t { + if data == 1 { + data + } else { + fact(data - 1) * data + } +} diff --git a/src/test/run-pass/aux/extern-take-value.rs b/src/test/run-pass/aux/extern-take-value.rs new file mode 100644 index 00000000000..500c455136b --- /dev/null +++ b/src/test/run-pass/aux/extern-take-value.rs @@ -0,0 +1,15 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub extern fn f() -> i32 { 1 } +pub extern fn g() -> i32 { 2 } + +pub fn get_f() -> extern fn() -> i32 { f } +pub fn get_g() -> extern fn() -> i32 { g } diff --git a/src/test/run-pass/aux/extern_calling_convention.rs b/src/test/run-pass/aux/extern_calling_convention.rs new file mode 100644 index 00000000000..55a4226c663 --- /dev/null +++ b/src/test/run-pass/aux/extern_calling_convention.rs @@ -0,0 +1,36 @@ +// Copyright 2013-2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Make sure Rust generates the correct calling convention for extern +// functions. + +#[inline(never)] +#[cfg(target_arch = "x86_64")] +pub extern "win64" fn foo(a: isize, b: isize, c: isize, d: isize) { + assert_eq!(a, 1); + assert_eq!(b, 2); + assert_eq!(c, 3); + assert_eq!(d, 4); + + println!("a: {}, b: {}, c: {}, d: {}", + a, b, c, d) +} + +#[inline(never)] +#[cfg(not(target_arch = "x86_64"))] +pub extern fn foo(a: isize, b: isize, c: isize, d: isize) { + assert_eq!(a, 1); + assert_eq!(b, 2); + assert_eq!(c, 3); + assert_eq!(d, 4); + + println!("a: {}, b: {}, c: {}, d: {}", + a, b, c, d) +} diff --git a/src/test/run-pass/aux/extern_mod_ordering_lib.rs b/src/test/run-pass/aux/extern_mod_ordering_lib.rs new file mode 100644 index 00000000000..0fb6adfcda1 --- /dev/null +++ b/src/test/run-pass/aux/extern_mod_ordering_lib.rs @@ -0,0 +1,15 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] + +pub mod extern_mod_ordering_lib { + pub fn f() {} +} diff --git a/src/test/run-pass/aux/fat_drop.rs b/src/test/run-pass/aux/fat_drop.rs new file mode 100644 index 00000000000..1f944b6ed32 --- /dev/null +++ b/src/test/run-pass/aux/fat_drop.rs @@ -0,0 +1,23 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub static mut DROPPED: bool = false; + +pub struct S { + _unsized: [u8] +} + +impl Drop for S { + fn drop(&mut self) { + unsafe { + DROPPED = true; + } + } +} diff --git a/src/test/run-pass/aux/fn-abi.rs b/src/test/run-pass/aux/fn-abi.rs new file mode 100644 index 00000000000..5d380ea6a5a --- /dev/null +++ b/src/test/run-pass/aux/fn-abi.rs @@ -0,0 +1,12 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[no_mangle] +pub extern fn foo() {} diff --git a/src/test/run-pass/aux/foreign_lib.rs b/src/test/run-pass/aux/foreign_lib.rs new file mode 100644 index 00000000000..460d0a0088c --- /dev/null +++ b/src/test/run-pass/aux/foreign_lib.rs @@ -0,0 +1,48 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="foreign_lib"] + +#![feature(libc)] + +pub mod rustrt { + extern crate libc; + + #[link(name = "rust_test_helpers")] + extern { + pub fn rust_get_test_int() -> libc::intptr_t; + } +} + +pub mod rustrt2 { + extern crate libc; + + extern { + pub fn rust_get_test_int() -> libc::intptr_t; + } +} + +pub mod rustrt3 { + // Different type, but same ABI (on all supported platforms). + // Ensures that we don't ICE or trigger LLVM asserts when + // importing the same symbol under different types. + // See https://github.com/rust-lang/rust/issues/32740. + extern { + pub fn rust_get_test_int() -> *const u8; + } +} + +pub fn local_uses() { + unsafe { + let x = rustrt::rust_get_test_int(); + assert_eq!(x, rustrt2::rust_get_test_int()); + assert_eq!(x as *const _, rustrt3::rust_get_test_int()); + } +} diff --git a/src/test/run-pass/aux/go_trait.rs b/src/test/run-pass/aux/go_trait.rs new file mode 100644 index 00000000000..044bb606b40 --- /dev/null +++ b/src/test/run-pass/aux/go_trait.rs @@ -0,0 +1,53 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(specialization)] + +// Common code used for tests that model the Fn/FnMut/FnOnce hierarchy. + +pub trait Go { + fn go(&self, arg: isize); +} + +pub fn go(this: &G, arg: isize) { + this.go(arg) +} + +pub trait GoMut { + fn go_mut(&mut self, arg: isize); +} + +pub fn go_mut(this: &mut G, arg: isize) { + this.go_mut(arg) +} + +pub trait GoOnce { + fn go_once(self, arg: isize); +} + +pub fn go_once(this: G, arg: isize) { + this.go_once(arg) +} + +impl GoMut for G + where G : Go +{ + default fn go_mut(&mut self, arg: isize) { + go(&*self, arg) + } +} + +impl GoOnce for G + where G : GoMut +{ + default fn go_once(mut self, arg: isize) { + go_mut(&mut self, arg) + } +} diff --git a/src/test/run-pass/aux/i8.rs b/src/test/run-pass/aux/i8.rs new file mode 100644 index 00000000000..44e62b99a96 --- /dev/null +++ b/src/test/run-pass/aux/i8.rs @@ -0,0 +1,13 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// A crate named after a built-in type. + +pub struct Test; diff --git a/src/test/run-pass/aux/impl_privacy_xc_1.rs b/src/test/run-pass/aux/impl_privacy_xc_1.rs new file mode 100644 index 00000000000..ad3cdedf7ea --- /dev/null +++ b/src/test/run-pass/aux/impl_privacy_xc_1.rs @@ -0,0 +1,19 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +pub struct Fish { + pub x: isize +} + +impl Fish { + pub fn swim(&self) {} +} diff --git a/src/test/run-pass/aux/impl_privacy_xc_2.rs b/src/test/run-pass/aux/impl_privacy_xc_2.rs new file mode 100644 index 00000000000..c3212b0fc6d --- /dev/null +++ b/src/test/run-pass/aux/impl_privacy_xc_2.rs @@ -0,0 +1,23 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +pub struct Fish { + pub x: isize +} + +mod unexported { + use super::Fish; + impl PartialEq for Fish { + fn eq(&self, _: &Fish) -> bool { true } + fn ne(&self, _: &Fish) -> bool { false } + } +} diff --git a/src/test/run-pass/aux/inline_dtor.rs b/src/test/run-pass/aux/inline_dtor.rs new file mode 100644 index 00000000000..dd1fdc2e498 --- /dev/null +++ b/src/test/run-pass/aux/inline_dtor.rs @@ -0,0 +1,18 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="inline_dtor"] + +pub struct Foo; + +impl Drop for Foo { + #[inline] + fn drop(&mut self) {} +} diff --git a/src/test/run-pass/aux/inner_static.rs b/src/test/run-pass/aux/inner_static.rs new file mode 100644 index 00000000000..0d15c13a4ef --- /dev/null +++ b/src/test/run-pass/aux/inner_static.rs @@ -0,0 +1,61 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct A { pub v: T } +pub struct B { pub v: T } + +pub mod test { + pub struct A { pub v: T } + + impl A { + pub fn foo(&self) -> isize { + static a: isize = 5; + return a + } + + pub fn bar(&self) -> isize { + static a: isize = 6; + return a; + } + } +} + +impl A { + pub fn foo(&self) -> isize { + static a: isize = 1; + return a + } + + pub fn bar(&self) -> isize { + static a: isize = 2; + return a; + } +} + +impl B { + pub fn foo(&self) -> isize { + static a: isize = 3; + return a + } + + pub fn bar(&self) -> isize { + static a: isize = 4; + return a; + } +} + +pub fn foo() -> isize { + let a = A { v: () }; + let b = B { v: () }; + let c = test::A { v: () }; + return a.foo() + a.bar() + + b.foo() + b.bar() + + c.foo() + c.bar(); +} diff --git a/src/test/run-pass/aux/iss.rs b/src/test/run-pass/aux/iss.rs new file mode 100644 index 00000000000..b231efa0fec --- /dev/null +++ b/src/test/run-pass/aux/iss.rs @@ -0,0 +1,22 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="issue6919_3"] + +// part of issue-6919.rs + +pub struct C where K: FnOnce() { + pub k: K, +} + +fn no_op() { } +pub const D : C = C { + k: no_op as fn() +}; diff --git a/src/test/run-pass/aux/issue-10028.rs b/src/test/run-pass/aux/issue-10028.rs new file mode 100644 index 00000000000..a21deb44fcc --- /dev/null +++ b/src/test/run-pass/aux/issue-10028.rs @@ -0,0 +1,22 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(unsafe_no_drop_flag)] + +#[unsafe_no_drop_flag] +pub struct ZeroLengthThingWithDestructor; +impl Drop for ZeroLengthThingWithDestructor { + fn drop(&mut self) {} +} +impl ZeroLengthThingWithDestructor { + pub fn new() -> ZeroLengthThingWithDestructor { + ZeroLengthThingWithDestructor + } +} diff --git a/src/test/run-pass/aux/issue-11224.rs b/src/test/run-pass/aux/issue-11224.rs new file mode 100644 index 00000000000..15b72b37781 --- /dev/null +++ b/src/test/run-pass/aux/issue-11224.rs @@ -0,0 +1,26 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![deny(dead_code)] + +mod inner { + pub trait Trait { + fn f(&self) { f(); } + } + + impl Trait for isize {} + + fn f() {} +} + +pub fn foo() { + let a = &1isize as &inner::Trait; + a.f(); +} diff --git a/src/test/run-pass/aux/issue-11225-1.rs b/src/test/run-pass/aux/issue-11225-1.rs new file mode 100644 index 00000000000..e1ec15be927 --- /dev/null +++ b/src/test/run-pass/aux/issue-11225-1.rs @@ -0,0 +1,28 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +mod inner { + pub trait Trait { + fn f(&self) { f(); } + fn f_ufcs(&self) { f_ufcs(); } + } + + impl Trait for isize {} + + fn f() {} + fn f_ufcs() {} +} + +pub fn foo(t: T) { + t.f(); +} +pub fn foo_ufcs(t: T) { + T::f_ufcs(&t); +} diff --git a/src/test/run-pass/aux/issue-11225-2.rs b/src/test/run-pass/aux/issue-11225-2.rs new file mode 100644 index 00000000000..25110edda27 --- /dev/null +++ b/src/test/run-pass/aux/issue-11225-2.rs @@ -0,0 +1,38 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use inner::Trait; + +mod inner { + pub struct Foo; + pub trait Trait { + fn f(&self); + fn f_ufcs(&self); + } + + impl Trait for Foo { + fn f(&self) { } + fn f_ufcs(&self) { } + } +} + +pub trait Outer { + fn foo(&self, t: T) { t.f(); } + fn foo_ufcs(&self, t: T) { T::f(&t); } +} + +impl Outer for isize {} + +pub fn foo(t: T) { + t.foo(inner::Foo); +} +pub fn foo_ufcs(t: T) { + T::foo_ufcs(&t, inner::Foo) +} diff --git a/src/test/run-pass/aux/issue-11225-3.rs b/src/test/run-pass/aux/issue-11225-3.rs new file mode 100644 index 00000000000..d48fb68ba0f --- /dev/null +++ b/src/test/run-pass/aux/issue-11225-3.rs @@ -0,0 +1,38 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +trait PrivateTrait { + fn private_trait_method(&self); + fn private_trait_method_ufcs(&self); +} + +struct PrivateStruct; + +impl PrivateStruct { + fn private_inherent_method(&self) { } + fn private_inherent_method_ufcs(&self) { } +} + +impl PrivateTrait for PrivateStruct { + fn private_trait_method(&self) { } + fn private_trait_method_ufcs(&self) { } +} + +#[inline] +pub fn public_inlinable_function() { + PrivateStruct.private_trait_method(); + PrivateStruct.private_inherent_method(); +} + +#[inline] +pub fn public_inlinable_function_ufcs() { + PrivateStruct::private_trait_method(&PrivateStruct); + PrivateStruct::private_inherent_method(&PrivateStruct); +} diff --git a/src/test/run-pass/aux/issue-11508.rs b/src/test/run-pass/aux/issue-11508.rs new file mode 100644 index 00000000000..c5dc3439f2f --- /dev/null +++ b/src/test/run-pass/aux/issue-11508.rs @@ -0,0 +1,20 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct Closed01(pub F); + +pub trait Bar { fn new() -> Self; } + +impl Bar for Closed01 { + fn new() -> Closed01 { Closed01(Bar::new()) } +} +impl Bar for f32 { fn new() -> f32 { 1.0 } } + +pub fn random() -> T { Bar::new() } diff --git a/src/test/run-pass/aux/issue-11529.rs b/src/test/run-pass/aux/issue-11529.rs new file mode 100644 index 00000000000..21ef99e3c3d --- /dev/null +++ b/src/test/run-pass/aux/issue-11529.rs @@ -0,0 +1,11 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct A<'a>(pub &'a isize); diff --git a/src/test/run-pass/aux/issue-12133-dylib.rs b/src/test/run-pass/aux/issue-12133-dylib.rs new file mode 100644 index 00000000000..ea22258f67d --- /dev/null +++ b/src/test/run-pass/aux/issue-12133-dylib.rs @@ -0,0 +1,11 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "dylib"] diff --git a/src/test/run-pass/aux/issue-12133-dylib2.rs b/src/test/run-pass/aux/issue-12133-dylib2.rs new file mode 100644 index 00000000000..fa5722ae6a3 --- /dev/null +++ b/src/test/run-pass/aux/issue-12133-dylib2.rs @@ -0,0 +1,16 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +#![crate_type = "dylib"] + +extern crate issue_12133_rlib as a; +extern crate issue_12133_dylib as b; diff --git a/src/test/run-pass/aux/issue-12133-rlib.rs b/src/test/run-pass/aux/issue-12133-rlib.rs new file mode 100644 index 00000000000..8e46acca124 --- /dev/null +++ b/src/test/run-pass/aux/issue-12133-rlib.rs @@ -0,0 +1,13 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +#![crate_type = "rlib"] diff --git a/src/test/run-pass/aux/issue-12660-aux.rs b/src/test/run-pass/aux/issue-12660-aux.rs new file mode 100644 index 00000000000..9f2bd5d0e93 --- /dev/null +++ b/src/test/run-pass/aux/issue-12660-aux.rs @@ -0,0 +1,21 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] +#![crate_name="issue12660aux"] + +pub use my_mod::{MyStruct, my_fn}; + +mod my_mod { + pub struct MyStruct; + + pub fn my_fn(my_struct: MyStruct) { + } +} diff --git a/src/test/run-pass/aux/issue-13620-1.rs b/src/test/run-pass/aux/issue-13620-1.rs new file mode 100644 index 00000000000..e373421fabf --- /dev/null +++ b/src/test/run-pass/aux/issue-13620-1.rs @@ -0,0 +1,19 @@ +// Copyright 2012-2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct Foo { + pub foo: extern fn() +} + +extern fn the_foo() {} + +pub const FOO: Foo = Foo { + foo: the_foo +}; diff --git a/src/test/run-pass/aux/issue-13620-2.rs b/src/test/run-pass/aux/issue-13620-2.rs new file mode 100644 index 00000000000..554170bc130 --- /dev/null +++ b/src/test/run-pass/aux/issue-13620-2.rs @@ -0,0 +1,13 @@ +// Copyright 2012-2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +extern crate issue_13620_1 as crate1; + +pub static FOO2: crate1::Foo = crate1::FOO; diff --git a/src/test/run-pass/aux/issue-13872-1.rs b/src/test/run-pass/aux/issue-13872-1.rs new file mode 100644 index 00000000000..941b67eb2da --- /dev/null +++ b/src/test/run-pass/aux/issue-13872-1.rs @@ -0,0 +1,11 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub enum A { B } diff --git a/src/test/run-pass/aux/issue-13872-2.rs b/src/test/run-pass/aux/issue-13872-2.rs new file mode 100644 index 00000000000..bb51417528a --- /dev/null +++ b/src/test/run-pass/aux/issue-13872-2.rs @@ -0,0 +1,13 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +extern crate issue_13872_1 as foo; + +pub use foo::A::B; diff --git a/src/test/run-pass/aux/issue-13872-3.rs b/src/test/run-pass/aux/issue-13872-3.rs new file mode 100644 index 00000000000..e20618f1ec0 --- /dev/null +++ b/src/test/run-pass/aux/issue-13872-3.rs @@ -0,0 +1,19 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +extern crate issue_13872_2 as bar; + +use bar::B; + +pub fn foo() { + match B { + B => {} + } +} diff --git a/src/test/run-pass/aux/issue-14344-1.rs b/src/test/run-pass/aux/issue-14344-1.rs new file mode 100644 index 00000000000..78c03bac33f --- /dev/null +++ b/src/test/run-pass/aux/issue-14344-1.rs @@ -0,0 +1,15 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +#![crate_type = "rlib"] + +pub fn foo() {} diff --git a/src/test/run-pass/aux/issue-14344-2.rs b/src/test/run-pass/aux/issue-14344-2.rs new file mode 100644 index 00000000000..9df35e50adb --- /dev/null +++ b/src/test/run-pass/aux/issue-14344-2.rs @@ -0,0 +1,13 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +extern crate issue_14344_1; + +pub fn bar() {} diff --git a/src/test/run-pass/aux/issue-14421.rs b/src/test/run-pass/aux/issue-14421.rs new file mode 100644 index 00000000000..a48088609f9 --- /dev/null +++ b/src/test/run-pass/aux/issue-14421.rs @@ -0,0 +1,35 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] +#![deny(warnings)] +#![allow(dead_code)] + +pub use src::aliases::B; +pub use src::hidden_core::make; + +mod src { + pub mod aliases { + use super::hidden_core::A; + pub type B = A; + } + + pub mod hidden_core { + use super::aliases::B; + + pub struct A { t: T } + + pub fn make() -> B { A { t: 1.0 } } + + impl A { + pub fn foo(&mut self) { println!("called foo"); } + } + } +} diff --git a/src/test/run-pass/aux/issue-14422.rs b/src/test/run-pass/aux/issue-14422.rs new file mode 100644 index 00000000000..32af6d9255e --- /dev/null +++ b/src/test/run-pass/aux/issue-14422.rs @@ -0,0 +1,35 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] +#![deny(warnings)] + +pub use src::aliases::B; +pub use src::hidden_core::make; + +mod src { + pub mod aliases { + use super::hidden_core::A; + pub type B = A; + } + + pub mod hidden_core { + use super::aliases::B; + + #[derive(Copy, Clone)] + pub struct A; + + pub fn make() -> B { A } + + impl A { + pub fn foo(&mut self) { println!("called foo"); } + } + } +} diff --git a/src/test/run-pass/aux/issue-15562.rs b/src/test/run-pass/aux/issue-15562.rs new file mode 100644 index 00000000000..76243d3bced --- /dev/null +++ b/src/test/run-pass/aux/issue-15562.rs @@ -0,0 +1,15 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +extern { + pub fn transmute(); +} diff --git a/src/test/run-pass/aux/issue-16643.rs b/src/test/run-pass/aux/issue-16643.rs new file mode 100644 index 00000000000..b590160a0c2 --- /dev/null +++ b/src/test/run-pass/aux/issue-16643.rs @@ -0,0 +1,29 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +pub struct TreeBuilder { pub h: H } + +impl TreeBuilder { + pub fn process_token(&mut self) { + match self { + _ => for _y in self.by_ref() {} + } + } +} + +impl Iterator for TreeBuilder { + type Item = H; + + fn next(&mut self) -> Option { + None + } +} diff --git a/src/test/run-pass/aux/issue-17662.rs b/src/test/run-pass/aux/issue-17662.rs new file mode 100644 index 00000000000..fb55a077005 --- /dev/null +++ b/src/test/run-pass/aux/issue-17662.rs @@ -0,0 +1,22 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +pub trait Foo<'a, T> { + fn foo(&'a self) -> T; +} + +pub fn foo<'a, T>(x: &'a Foo<'a, T>) -> T { + let x: &'a Foo = x; + // ^ the lifetime parameter of Foo is left to be inferred. + x.foo() + // ^ encoding this method call in metadata triggers an ICE. +} diff --git a/src/test/run-pass/aux/issue-17718-aux.rs b/src/test/run-pass/aux/issue-17718-aux.rs new file mode 100644 index 00000000000..373fc042175 --- /dev/null +++ b/src/test/run-pass/aux/issue-17718-aux.rs @@ -0,0 +1,24 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(const_fn)] + +use std::sync::atomic; + +pub const C1: usize = 1; +pub const C2: atomic::AtomicUsize = atomic::AtomicUsize::new(0); +pub const C3: fn() = foo; +pub const C4: usize = C1 * C1 + C1 / C1; +pub const C5: &'static usize = &C4; + +pub static S1: usize = 3; +pub static S2: atomic::AtomicUsize = atomic::AtomicUsize::new(0); + +fn foo() {} diff --git a/src/test/run-pass/aux/issue-18501.rs b/src/test/run-pass/aux/issue-18501.rs new file mode 100644 index 00000000000..af3bc20378c --- /dev/null +++ b/src/test/run-pass/aux/issue-18501.rs @@ -0,0 +1,27 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "rlib"] +struct Foo; + +trait Tr { + fn tr(&self); +} + +impl Tr for Foo { + fn tr(&self) {} +} + +fn take_method(f: fn(&T), t: &T) {} + +#[inline] +pub fn pass_method() { + take_method(Tr::tr, &Foo); +} diff --git a/src/test/run-pass/aux/issue-18514.rs b/src/test/run-pass/aux/issue-18514.rs new file mode 100644 index 00000000000..2a5e07a3285 --- /dev/null +++ b/src/test/run-pass/aux/issue-18514.rs @@ -0,0 +1,27 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "rlib"] + +pub trait Tr { + fn tr(&self); +} + +pub struct St(pub Vec); + +impl Tr for St { + fn tr(&self) { + match self { + &St(ref v) => { + v.iter(); + } + } + } +} diff --git a/src/test/run-pass/aux/issue-18711.rs b/src/test/run-pass/aux/issue-18711.rs new file mode 100644 index 00000000000..a29dcc00cdd --- /dev/null +++ b/src/test/run-pass/aux/issue-18711.rs @@ -0,0 +1,16 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(unboxed_closures)] +#![crate_type = "rlib"] + +pub fn inner(f: F) -> F { + (move || f)() +} diff --git a/src/test/run-pass/aux/issue-18913-1.rs b/src/test/run-pass/aux/issue-18913-1.rs new file mode 100644 index 00000000000..4315e27797f --- /dev/null +++ b/src/test/run-pass/aux/issue-18913-1.rs @@ -0,0 +1,16 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +#![crate_type = "rlib"] +#![crate_name = "foo"] + +pub fn foo() -> i32 { 0 } diff --git a/src/test/run-pass/aux/issue-18913-2.rs b/src/test/run-pass/aux/issue-18913-2.rs new file mode 100644 index 00000000000..dcdeaec48f5 --- /dev/null +++ b/src/test/run-pass/aux/issue-18913-2.rs @@ -0,0 +1,16 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +#![crate_type = "rlib"] +#![crate_name = "foo"] + +pub fn foo() -> i32 { 1 } diff --git a/src/test/run-pass/aux/issue-19340-1.rs b/src/test/run-pass/aux/issue-19340-1.rs new file mode 100644 index 00000000000..fc61b78d8a7 --- /dev/null +++ b/src/test/run-pass/aux/issue-19340-1.rs @@ -0,0 +1,13 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub enum Homura { + Madoka { name: String }, +} diff --git a/src/test/run-pass/aux/issue-2380.rs b/src/test/run-pass/aux/issue-2380.rs new file mode 100644 index 00000000000..cfebc4abaaa --- /dev/null +++ b/src/test/run-pass/aux/issue-2380.rs @@ -0,0 +1,26 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="a"] +#![crate_type = "lib"] + +#![allow(unknown_features)] +#![feature(box_syntax)] + +pub trait i +{ + fn dummy(&self, t: T) -> T { panic!() } +} + +pub fn f() -> Box+'static> { + impl i for () { } + + box () as Box+'static> +} diff --git a/src/test/run-pass/aux/issue-2414-a.rs b/src/test/run-pass/aux/issue-2414-a.rs new file mode 100644 index 00000000000..8c414193bd6 --- /dev/null +++ b/src/test/run-pass/aux/issue-2414-a.rs @@ -0,0 +1,22 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="a"] +#![crate_type = "lib"] + +type t1 = usize; + +trait foo { + fn foo(&self); +} + +impl foo for String { + fn foo(&self) {} +} diff --git a/src/test/run-pass/aux/issue-2414-b.rs b/src/test/run-pass/aux/issue-2414-b.rs new file mode 100644 index 00000000000..b1c95bcb430 --- /dev/null +++ b/src/test/run-pass/aux/issue-2414-b.rs @@ -0,0 +1,15 @@ +// Copyright 2012-2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + + +#![crate_name="b"] +#![crate_type = "lib"] + +extern crate a; diff --git a/src/test/run-pass/aux/issue-25185-1.rs b/src/test/run-pass/aux/issue-25185-1.rs new file mode 100644 index 00000000000..1ec29501b76 --- /dev/null +++ b/src/test/run-pass/aux/issue-25185-1.rs @@ -0,0 +1,21 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +#![feature(linked_from)] + +#![crate_type = "rlib"] + +#[link(name = "rust_test_helpers", kind = "static")] +#[linked_from = "rust_test_helpers"] +extern { + pub fn rust_dbg_extern_identity_u32(u: u32) -> u32; +} diff --git a/src/test/run-pass/aux/issue-25185-2.rs b/src/test/run-pass/aux/issue-25185-2.rs new file mode 100644 index 00000000000..00b5277d6c0 --- /dev/null +++ b/src/test/run-pass/aux/issue-25185-2.rs @@ -0,0 +1,13 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +extern crate issue_25185_1; + +pub use issue_25185_1::rust_dbg_extern_identity_u32; diff --git a/src/test/run-pass/aux/issue-2526.rs b/src/test/run-pass/aux/issue-2526.rs new file mode 100644 index 00000000000..3d777d01d50 --- /dev/null +++ b/src/test/run-pass/aux/issue-2526.rs @@ -0,0 +1,54 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="issue_2526"] +#![crate_type = "lib"] + +use std::marker; + +pub struct arc_destruct { + _data: isize, + _marker: marker::PhantomData +} + +impl Drop for arc_destruct { + fn drop(&mut self) {} +} + +fn arc_destruct(data: isize) -> arc_destruct { + arc_destruct { + _data: data, + _marker: marker::PhantomData + } +} + +fn arc(_data: T) -> arc_destruct { + arc_destruct(0) +} + +fn init() -> arc_destruct { + arc(context_res()) +} + +pub struct context_res { + ctx : isize, +} + +impl Drop for context_res { + fn drop(&mut self) {} +} + +fn context_res() -> context_res { + context_res { + ctx: 0 + } +} + +pub type context = arc_destruct; diff --git a/src/test/run-pass/aux/issue-25467.rs b/src/test/run-pass/aux/issue-25467.rs new file mode 100644 index 00000000000..e358cde1573 --- /dev/null +++ b/src/test/run-pass/aux/issue-25467.rs @@ -0,0 +1,20 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] + +pub trait Trait { + // the issue is sensitive to interning order - so use names + // unlikely to appear in libstd. + type Issue25467FooT; + type Issue25467BarT; +} + +pub type Object = Option>>; diff --git a/src/test/run-pass/aux/issue-2631-a.rs b/src/test/run-pass/aux/issue-2631-a.rs new file mode 100644 index 00000000000..604a3e69a21 --- /dev/null +++ b/src/test/run-pass/aux/issue-2631-a.rs @@ -0,0 +1,24 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="req"] +#![crate_type = "lib"] + +use std::cell::RefCell; +use std::collections::HashMap; +use std::rc::Rc; + +pub type header_map = HashMap>>>>; + +// the unused ty param is necessary so this gets monomorphized +pub fn request(req: &header_map) { + let data = req[&"METHOD".to_string()].clone(); + let _x = data.borrow().clone()[0].clone(); +} diff --git a/src/test/run-pass/aux/issue-29485.rs b/src/test/run-pass/aux/issue-29485.rs new file mode 100644 index 00000000000..825c4497021 --- /dev/null +++ b/src/test/run-pass/aux/issue-29485.rs @@ -0,0 +1,26 @@ +// Copyright 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="a"] +#![crate_type = "lib"] + +pub struct X(pub u8); + +impl Drop for X { + fn drop(&mut self) { + assert_eq!(self.0, 1) + } +} + +pub fn f(x: &mut X, g: fn()) { + x.0 = 1; + g(); + x.0 = 0; +} diff --git a/src/test/run-pass/aux/issue-3012-1.rs b/src/test/run-pass/aux/issue-3012-1.rs new file mode 100644 index 00000000000..b6199f59ebe --- /dev/null +++ b/src/test/run-pass/aux/issue-3012-1.rs @@ -0,0 +1,33 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="socketlib"] +#![crate_type = "lib"] +#![feature(libc)] + +pub mod socket { + extern crate libc; + + pub struct socket_handle { + sockfd: libc::c_int, + } + + impl Drop for socket_handle { + fn drop(&mut self) { + /* c::close(self.sockfd); */ + } + } + + pub fn socket_handle(x: libc::c_int) -> socket_handle { + socket_handle { + sockfd: x + } + } +} diff --git a/src/test/run-pass/aux/issue-31702-1.rs b/src/test/run-pass/aux/issue-31702-1.rs new file mode 100644 index 00000000000..50a31630df3 --- /dev/null +++ b/src/test/run-pass/aux/issue-31702-1.rs @@ -0,0 +1,26 @@ +// Copyright 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[derive(Copy)] +pub struct U256(pub [u64; 4]); + +impl Clone for U256 { + fn clone(&self) -> U256 { + *self + } +} + +impl U256 { + pub fn new(value: u64) -> U256 { + let mut ret = [0; 4]; + ret[0] = value; + U256(ret) + } +} diff --git a/src/test/run-pass/aux/issue-31702-2.rs b/src/test/run-pass/aux/issue-31702-2.rs new file mode 100644 index 00000000000..c5b1bc6dfb0 --- /dev/null +++ b/src/test/run-pass/aux/issue-31702-2.rs @@ -0,0 +1,30 @@ +// Copyright 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags: -g + +extern crate issue_31702_1; + +use std::collections::HashMap; +use issue_31702_1::U256; + +pub struct Ethash { + engine_params: for<'a> fn() -> Option<&'a Vec>, + u256_params: HashMap, +} + +impl Ethash { + pub fn u256_param(&mut self, name: &str) -> U256 { + let engine = self.engine_params; + *self.u256_params.entry(name.to_owned()).or_insert_with(|| { + engine().map_or(U256::new(0u64), |_a| loop {}) + }) + } +} diff --git a/src/test/run-pass/aux/issue-4208-cc.rs b/src/test/run-pass/aux/issue-4208-cc.rs new file mode 100644 index 00000000000..a7c1633784d --- /dev/null +++ b/src/test/run-pass/aux/issue-4208-cc.rs @@ -0,0 +1,20 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="numeric"] +#![crate_type = "lib"] + +pub trait Trig { + fn sin(&self) -> T; +} + +pub fn sin, R>(theta: &T) -> R { theta.sin() } + +pub trait Angle: Trig {} diff --git a/src/test/run-pass/aux/issue-4545.rs b/src/test/run-pass/aux/issue-4545.rs new file mode 100644 index 00000000000..29feeaa7d92 --- /dev/null +++ b/src/test/run-pass/aux/issue-4545.rs @@ -0,0 +1,12 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct S(Option); +pub fn mk() -> S { S(None) } diff --git a/src/test/run-pass/aux/issue-5518.rs b/src/test/run-pass/aux/issue-5518.rs new file mode 100644 index 00000000000..cea227e050f --- /dev/null +++ b/src/test/run-pass/aux/issue-5518.rs @@ -0,0 +1,14 @@ +// Copyright 2012-2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +trait A<'a, T> { + fn f(&mut self) -> &'a mut T; + fn p() -> T; +} diff --git a/src/test/run-pass/aux/issue-5521.rs b/src/test/run-pass/aux/issue-5521.rs new file mode 100644 index 00000000000..82bd2b64204 --- /dev/null +++ b/src/test/run-pass/aux/issue-5521.rs @@ -0,0 +1,14 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + + +use std::collections::HashMap; + +pub type map = Box>; diff --git a/src/test/run-pass/aux/issue-7178.rs b/src/test/run-pass/aux/issue-7178.rs new file mode 100644 index 00000000000..18b464bd924 --- /dev/null +++ b/src/test/run-pass/aux/issue-7178.rs @@ -0,0 +1,17 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct Foo<'a, A:'a>(&'a A); + +impl<'a, A> Foo<'a, A> { + pub fn new(a: &'a A) -> Foo<'a, A> { + Foo(a) + } +} diff --git a/src/test/run-pass/aux/issue-7899.rs b/src/test/run-pass/aux/issue-7899.rs new file mode 100644 index 00000000000..e197e84442b --- /dev/null +++ b/src/test/run-pass/aux/issue-7899.rs @@ -0,0 +1,11 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct V2(pub T, pub T); diff --git a/src/test/run-pass/aux/issue-8044.rs b/src/test/run-pass/aux/issue-8044.rs new file mode 100644 index 00000000000..8f328699ae0 --- /dev/null +++ b/src/test/run-pass/aux/issue-8044.rs @@ -0,0 +1,25 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct BTree { + pub node: TreeItem, +} + +pub enum TreeItem { + TreeLeaf { value: V }, +} + +pub fn leaf(value: V) -> TreeItem { + TreeItem::TreeLeaf { value: value } +} + +fn main() { + BTree:: { node: leaf(1) }; +} diff --git a/src/test/run-pass/aux/issue-8259.rs b/src/test/run-pass/aux/issue-8259.rs new file mode 100644 index 00000000000..91167e8e32b --- /dev/null +++ b/src/test/run-pass/aux/issue-8259.rs @@ -0,0 +1,15 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + + +pub enum Foo<'a> { + A, + B(&'a str), +} diff --git a/src/test/run-pass/aux/issue-9906.rs b/src/test/run-pass/aux/issue-9906.rs new file mode 100644 index 00000000000..5eb48985bf9 --- /dev/null +++ b/src/test/run-pass/aux/issue-9906.rs @@ -0,0 +1,25 @@ +// Copyright 2013-2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub use other::FooBar; +pub use other::foo; + +mod other { + pub struct FooBar{value: isize} + impl FooBar{ + pub fn new(val: isize) -> FooBar { + FooBar{value: val} + } + } + + pub fn foo(){ + 1+1; + } +} diff --git a/src/test/run-pass/aux/issue-9968.rs b/src/test/run-pass/aux/issue-9968.rs new file mode 100644 index 00000000000..d04d761e112 --- /dev/null +++ b/src/test/run-pass/aux/issue-9968.rs @@ -0,0 +1,32 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub use internal::core::{Trait, Struct}; + +mod internal { + pub mod core { + pub struct Struct; + impl Struct { + pub fn init() -> Struct { + Struct + } + } + + pub trait Trait { + fn test(&self) { + private(); + } + } + + impl Trait for Struct {} + + fn private() { } + } +} diff --git a/src/test/run-pass/aux/issue13507.rs b/src/test/run-pass/aux/issue13507.rs new file mode 100644 index 00000000000..4cb846b5186 --- /dev/null +++ b/src/test/run-pass/aux/issue13507.rs @@ -0,0 +1,99 @@ +// Copyright 2012-2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(core)] + +pub mod testtypes { + use std::any::TypeId; + + pub fn type_ids() -> Vec { + vec![ + TypeId::of::(), + TypeId::of::(), + TypeId::of::(), + TypeId::of::(), + TypeId::of::(), + TypeId::of::(), + TypeId::of::(), + TypeId::of::(), + TypeId::of::(), + TypeId::of::(), + TypeId::of::(), + TypeId::of::(), + TypeId::of::(), + TypeId::of::(), + TypeId::of::(), + TypeId::of::() + ] + } + + // Tests TyBool + pub type FooBool = bool; + + // Tests TyChar + pub type FooChar = char; + + // Tests TyInt (does not test all variants of IntTy) + pub type FooInt = isize; + + // Tests TyUint (does not test all variants of UintTy) + pub type FooUint = usize; + + // Tests TyFloat (does not test all variants of FloatTy) + pub type FooFloat = f64; + + // Tests TyStr + pub type FooStr = str; + + // Tests TyArray + pub type FooArray = [u8; 1]; + + // Tests TySlice + pub type FooSlice = [u8]; + + // Tests TyBox (of u8) + pub type FooBox = Box; + + // Tests TyRawPtr + pub type FooPtr = *const u8; + + // Tests TyRef + pub type FooRef = &'static u8; + + // Tests TyFnPtr + pub type FooFnPtr = fn(u8) -> bool; + + // Tests TyTrait + pub trait FooTrait { + fn foo_method(&self) -> usize; + } + + // Tests TyStruct + pub struct FooStruct { + pub pub_foo_field: usize, + foo_field: usize + } + + // Tests TyEnum + pub enum FooEnum { + VarA(usize), + VarB(usize, usize) + } + + // Tests TyTuple + pub type FooNil = (); + pub type FooTuple = (u8, i8, bool); + + // Skipping TyParam + + // Skipping TyInfer + + // Skipping TyError +} diff --git a/src/test/run-pass/aux/issue2170lib.rs b/src/test/run-pass/aux/issue2170lib.rs new file mode 100644 index 00000000000..b311ee35674 --- /dev/null +++ b/src/test/run-pass/aux/issue2170lib.rs @@ -0,0 +1,28 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +fn foo(_x: i32) { +} + +pub struct rsrc { + x: i32, +} + +impl Drop for rsrc { + fn drop(&mut self) { + foo(self.x); + } +} + +pub fn rsrc(x: i32) -> rsrc { + rsrc { + x: x + } +} diff --git a/src/test/run-pass/aux/issue_10031_aux.rs b/src/test/run-pass/aux/issue_10031_aux.rs new file mode 100644 index 00000000000..f0f1af2e3a3 --- /dev/null +++ b/src/test/run-pass/aux/issue_10031_aux.rs @@ -0,0 +1,11 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct Wrap(pub A); diff --git a/src/test/run-pass/aux/issue_12612_1.rs b/src/test/run-pass/aux/issue_12612_1.rs new file mode 100644 index 00000000000..a0234c1185a --- /dev/null +++ b/src/test/run-pass/aux/issue_12612_1.rs @@ -0,0 +1,13 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub mod bar { + pub fn foo() {} +} diff --git a/src/test/run-pass/aux/issue_12612_2.rs b/src/test/run-pass/aux/issue_12612_2.rs new file mode 100644 index 00000000000..b4ae4374b2e --- /dev/null +++ b/src/test/run-pass/aux/issue_12612_2.rs @@ -0,0 +1,11 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn baz() {} diff --git a/src/test/run-pass/aux/issue_19293.rs b/src/test/run-pass/aux/issue_19293.rs new file mode 100644 index 00000000000..12894ad72e1 --- /dev/null +++ b/src/test/run-pass/aux/issue_19293.rs @@ -0,0 +1,14 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct Foo (pub isize); +pub enum MyEnum { + Foo(Foo), +} diff --git a/src/test/run-pass/aux/issue_20389.rs b/src/test/run-pass/aux/issue_20389.rs new file mode 100644 index 00000000000..4ce7e3079e3 --- /dev/null +++ b/src/test/run-pass/aux/issue_20389.rs @@ -0,0 +1,14 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub trait T { + type C; + fn dummy(&self) { } +} diff --git a/src/test/run-pass/aux/issue_2316_a.rs b/src/test/run-pass/aux/issue_2316_a.rs new file mode 100644 index 00000000000..6bd1e7335ad --- /dev/null +++ b/src/test/run-pass/aux/issue_2316_a.rs @@ -0,0 +1,13 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +enum cat { + tabby, calico, tortoiseshell +} diff --git a/src/test/run-pass/aux/issue_2316_b.rs b/src/test/run-pass/aux/issue_2316_b.rs new file mode 100644 index 00000000000..8a212f6e5a9 --- /dev/null +++ b/src/test/run-pass/aux/issue_2316_b.rs @@ -0,0 +1,21 @@ +// Copyright 2012-2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![allow(unused_imports)] + +extern crate issue_2316_a; + +pub mod cloth { + use issue_2316_a::*; + + pub enum fabric { + gingham, flannel, calico + } +} diff --git a/src/test/run-pass/aux/issue_2472_b.rs b/src/test/run-pass/aux/issue_2472_b.rs new file mode 100644 index 00000000000..5f55476427f --- /dev/null +++ b/src/test/run-pass/aux/issue_2472_b.rs @@ -0,0 +1,24 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + + +pub struct S(pub ()); + +impl S { + pub fn foo(&self) { } +} + +pub trait T { + fn bar(&self); +} + +impl T for S { + fn bar(&self) { } +} diff --git a/src/test/run-pass/aux/issue_2723_a.rs b/src/test/run-pass/aux/issue_2723_a.rs new file mode 100644 index 00000000000..44bea136a7c --- /dev/null +++ b/src/test/run-pass/aux/issue_2723_a.rs @@ -0,0 +1,14 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + + +pub unsafe fn f(xs: Vec ) { + xs.iter().map(|_x| { unsafe fn q() { panic!(); } }).collect::>(); +} diff --git a/src/test/run-pass/aux/issue_3136_a.rc b/src/test/run-pass/aux/issue_3136_a.rc new file mode 100644 index 00000000000..320e0ceed0f --- /dev/null +++ b/src/test/run-pass/aux/issue_3136_a.rc @@ -0,0 +1,13 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +pub mod issue_3136_a; diff --git a/src/test/run-pass/aux/issue_3136_a.rs b/src/test/run-pass/aux/issue_3136_a.rs new file mode 100644 index 00000000000..55de208cc90 --- /dev/null +++ b/src/test/run-pass/aux/issue_3136_a.rs @@ -0,0 +1,24 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +trait x { + fn use_x(&self); +} +struct y(()); +impl x for y { + fn use_x(&self) { + struct foo { //~ ERROR quux + i: () + } + fn new_foo(i: ()) -> foo { + foo { i: i } + } + } +} diff --git a/src/test/run-pass/aux/issue_3979_traits.rs b/src/test/run-pass/aux/issue_3979_traits.rs new file mode 100644 index 00000000000..5c306be69c4 --- /dev/null +++ b/src/test/run-pass/aux/issue_3979_traits.rs @@ -0,0 +1,25 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="issue_3979_traits"] + +#![crate_type = "lib"] + +pub trait Positioned { + fn SetX(&mut self, isize); + fn X(&self) -> isize; +} + +pub trait Movable: Positioned { + fn translate(&mut self, dx: isize) { + let x = self.X() + dx; + self.SetX(x); + } +} diff --git a/src/test/run-pass/aux/issue_8401.rs b/src/test/run-pass/aux/issue_8401.rs new file mode 100644 index 00000000000..40e01c1474a --- /dev/null +++ b/src/test/run-pass/aux/issue_8401.rs @@ -0,0 +1,26 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// for this issue, this code must be built in a library + +use std::mem; + +trait A { + fn dummy(&self) { } +} +struct B; +impl A for B {} + +fn bar(_: &mut A, _: &T) {} + +fn foo(t: &T) { + let mut b = B; + bar(&mut b as &mut A, t) +} diff --git a/src/test/run-pass/aux/issue_9123.rs b/src/test/run-pass/aux/issue_9123.rs new file mode 100644 index 00000000000..8c2546e76cf --- /dev/null +++ b/src/test/run-pass/aux/issue_9123.rs @@ -0,0 +1,19 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +pub trait X { + fn x() { + fn f() { } + f(); + } + fn dummy(&self) { } +} diff --git a/src/test/run-pass/aux/issue_9155.rs b/src/test/run-pass/aux/issue_9155.rs new file mode 100644 index 00000000000..486eb8fd6f6 --- /dev/null +++ b/src/test/run-pass/aux/issue_9155.rs @@ -0,0 +1,17 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct Foo(T); + +impl Foo { + pub fn new(t: T) -> Foo { + Foo(t) + } +} diff --git a/src/test/run-pass/aux/issue_9188.rs b/src/test/run-pass/aux/issue_9188.rs new file mode 100644 index 00000000000..8ff85cc359d --- /dev/null +++ b/src/test/run-pass/aux/issue_9188.rs @@ -0,0 +1,23 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn foo() -> &'static isize { + if false { + static a: isize = 4; + return &a; + } else { + static a: isize = 5; + return &a; + } +} + +pub fn bar() -> &'static isize { + foo::() +} diff --git a/src/test/run-pass/aux/kinds_in_metadata.rs b/src/test/run-pass/aux/kinds_in_metadata.rs new file mode 100644 index 00000000000..82f182c04bd --- /dev/null +++ b/src/test/run-pass/aux/kinds_in_metadata.rs @@ -0,0 +1,18 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Tests that metadata serialization works for the `Copy` kind. + +#![crate_type="lib"] + +pub fn f() {} diff --git a/src/test/run-pass/aux/linkage1.rs b/src/test/run-pass/aux/linkage1.rs new file mode 100644 index 00000000000..ca4046d8163 --- /dev/null +++ b/src/test/run-pass/aux/linkage1.rs @@ -0,0 +1,14 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[no_mangle] +pub static foo: isize = 3; + +pub fn bar() {} diff --git a/src/test/run-pass/aux/macro_crate_def_only.rs b/src/test/run-pass/aux/macro_crate_def_only.rs new file mode 100644 index 00000000000..4f55ac4f65f --- /dev/null +++ b/src/test/run-pass/aux/macro_crate_def_only.rs @@ -0,0 +1,14 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[macro_export] +macro_rules! make_a_5 { + () => (5) +} diff --git a/src/test/run-pass/aux/macro_crate_nonterminal.rs b/src/test/run-pass/aux/macro_crate_nonterminal.rs new file mode 100644 index 00000000000..4f75e2b5d75 --- /dev/null +++ b/src/test/run-pass/aux/macro_crate_nonterminal.rs @@ -0,0 +1,22 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn increment(x: usize) -> usize { + x + 1 +} + +#[macro_export] +macro_rules! increment { + ($x:expr) => ($crate::increment($x)) +} + +pub fn check_local() { + assert_eq!(increment!(3), 4); +} diff --git a/src/test/run-pass/aux/macro_export_inner_module.rs b/src/test/run-pass/aux/macro_export_inner_module.rs new file mode 100644 index 00000000000..84e944f69b9 --- /dev/null +++ b/src/test/run-pass/aux/macro_export_inner_module.rs @@ -0,0 +1,16 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub mod inner { + #[macro_export] + macro_rules! foo { + () => (1) + } +} diff --git a/src/test/run-pass/aux/macro_reexport_1.rs b/src/test/run-pass/aux/macro_reexport_1.rs new file mode 100644 index 00000000000..aaeccc6e898 --- /dev/null +++ b/src/test/run-pass/aux/macro_reexport_1.rs @@ -0,0 +1,15 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "dylib"] +#[macro_export] +macro_rules! reexported { + () => ( 3 ) +} diff --git a/src/test/run-pass/aux/macro_reexport_2.rs b/src/test/run-pass/aux/macro_reexport_2.rs new file mode 100644 index 00000000000..3918be88d86 --- /dev/null +++ b/src/test/run-pass/aux/macro_reexport_2.rs @@ -0,0 +1,16 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "dylib"] +#![feature(macro_reexport)] + +#[macro_reexport(reexported)] +#[macro_use] #[no_link] +extern crate macro_reexport_1; diff --git a/src/test/run-pass/aux/macro_reexport_2_no_use.rs b/src/test/run-pass/aux/macro_reexport_2_no_use.rs new file mode 100644 index 00000000000..1d3dc26b0b4 --- /dev/null +++ b/src/test/run-pass/aux/macro_reexport_2_no_use.rs @@ -0,0 +1,16 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "dylib"] +#![feature(macro_reexport)] + +#[macro_reexport(reexported)] +#[no_link] +extern crate macro_reexport_1; diff --git a/src/test/run-pass/aux/macro_with_super_1.rs b/src/test/run-pass/aux/macro_with_super_1.rs new file mode 100644 index 00000000000..fd2e52bb355 --- /dev/null +++ b/src/test/run-pass/aux/macro_with_super_1.rs @@ -0,0 +1,26 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +#[macro_export] +macro_rules! declare { + () => ( + pub fn aaa() {} + + pub mod bbb { + use super::aaa; + + pub fn ccc() { + aaa(); + } + } + ) +} diff --git a/src/test/run-pass/aux/method_self_arg1.rs b/src/test/run-pass/aux/method_self_arg1.rs new file mode 100644 index 00000000000..348b71faf0c --- /dev/null +++ b/src/test/run-pass/aux/method_self_arg1.rs @@ -0,0 +1,48 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +#![allow(unknown_features)] +#![feature(box_syntax)] + +static mut COUNT: u64 = 1; + +pub fn get_count() -> u64 { unsafe { COUNT } } + +#[derive(Copy, Clone)] +pub struct Foo; + +impl Foo { + pub fn foo(self, x: &Foo) { + unsafe { COUNT *= 2; } + // Test internal call. + Foo::bar(&self); + Foo::bar(x); + + Foo::baz(self); + Foo::baz(*x); + + Foo::qux(box self); + Foo::qux(box *x); + } + + pub fn bar(&self) { + unsafe { COUNT *= 3; } + } + + pub fn baz(self) { + unsafe { COUNT *= 5; } + } + + pub fn qux(self: Box) { + unsafe { COUNT *= 7; } + } +} diff --git a/src/test/run-pass/aux/method_self_arg2.rs b/src/test/run-pass/aux/method_self_arg2.rs new file mode 100644 index 00000000000..b67ec1b9bfc --- /dev/null +++ b/src/test/run-pass/aux/method_self_arg2.rs @@ -0,0 +1,65 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +#![allow(unknown_features)] +#![feature(box_syntax)] + +static mut COUNT: u64 = 1; + +pub fn get_count() -> u64 { unsafe { COUNT } } + +#[derive(Copy, Clone)] +pub struct Foo; + +impl Foo { + pub fn run_trait(self) { + unsafe { COUNT *= 17; } + // Test internal call. + Bar::foo1(&self); + Bar::foo2(self); + Bar::foo3(box self); + + Bar::bar1(&self); + Bar::bar2(self); + Bar::bar3(box self); + } +} + +pub trait Bar : Sized { + fn foo1(&self); + fn foo2(self); + fn foo3(self: Box); + + fn bar1(&self) { + unsafe { COUNT *= 7; } + } + fn bar2(self) { + unsafe { COUNT *= 11; } + } + fn bar3(self: Box) { + unsafe { COUNT *= 13; } + } +} + +impl Bar for Foo { + fn foo1(&self) { + unsafe { COUNT *= 2; } + } + + fn foo2(self) { + unsafe { COUNT *= 3; } + } + + fn foo3(self: Box) { + unsafe { COUNT *= 5; } + } +} diff --git a/src/test/run-pass/aux/mir_external_refs.rs b/src/test/run-pass/aux/mir_external_refs.rs new file mode 100644 index 00000000000..4cad98004d7 --- /dev/null +++ b/src/test/run-pass/aux/mir_external_refs.rs @@ -0,0 +1,28 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + + +pub struct S(pub u8); + +impl S { + pub fn hey() -> u8 { 24 } +} + +pub trait X { + fn hoy(&self) -> u8 { 25 } +} + +impl X for S {} + +pub enum E { + U(u8) +} + +pub fn regular_fn() -> u8 { 12 } diff --git a/src/test/run-pass/aux/moves_based_on_type_lib.rs b/src/test/run-pass/aux/moves_based_on_type_lib.rs new file mode 100644 index 00000000000..f95be3f4a1d --- /dev/null +++ b/src/test/run-pass/aux/moves_based_on_type_lib.rs @@ -0,0 +1,27 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] + +pub struct S { + x: isize, +} + +impl Drop for S { + fn drop(&mut self) { + println!("goodbye"); + } +} + +pub fn f() { + let x = S { x: 1 }; + let y = x; + let _z = y; +} diff --git a/src/test/run-pass/aux/msvc-data-only-lib.rs b/src/test/run-pass/aux/msvc-data-only-lib.rs new file mode 100644 index 00000000000..71fb9a51948 --- /dev/null +++ b/src/test/run-pass/aux/msvc-data-only-lib.rs @@ -0,0 +1,15 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +#![crate_type = "rlib"] + +pub static FOO: i32 = 42; diff --git a/src/test/run-pass/aux/namespaced_enum_emulate_flat.rs b/src/test/run-pass/aux/namespaced_enum_emulate_flat.rs new file mode 100644 index 00000000000..b7bde4a74a5 --- /dev/null +++ b/src/test/run-pass/aux/namespaced_enum_emulate_flat.rs @@ -0,0 +1,35 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub use Foo::*; + +pub enum Foo { + A, + B(isize), + C { a: isize }, +} + +impl Foo { + pub fn foo() {} +} + +pub mod nest { + pub use self::Bar::*; + + pub enum Bar { + D, + E(isize), + F { a: isize }, + } + + impl Bar { + pub fn foo() {} + } +} diff --git a/src/test/run-pass/aux/namespaced_enums.rs b/src/test/run-pass/aux/namespaced_enums.rs new file mode 100644 index 00000000000..3bf39b788db --- /dev/null +++ b/src/test/run-pass/aux/namespaced_enums.rs @@ -0,0 +1,20 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub enum Foo { + A, + B(isize), + C { a: isize }, +} + +impl Foo { + pub fn foo() {} + pub fn bar(&self) {} +} diff --git a/src/test/run-pass/aux/nested_item.rs b/src/test/run-pass/aux/nested_item.rs new file mode 100644 index 00000000000..63639c4cdb3 --- /dev/null +++ b/src/test/run-pass/aux/nested_item.rs @@ -0,0 +1,40 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// original problem +pub fn foo() -> isize { + { + static foo: isize = 2; + foo + } +} + +// issue 8134 +struct Foo; +impl Foo { + pub fn foo(&self) { + static X: usize = 1; + } +} + +// issue 8134 +pub struct Parser(T); +impl> Parser { + fn in_doctype(&mut self) { + static DOCTYPEPattern: [char; 6] = ['O', 'C', 'T', 'Y', 'P', 'E']; + } +} + +struct Bar; +impl Foo { + pub fn bar(&self) { + static X: usize = 1; + } +} diff --git a/src/test/run-pass/aux/newtype_struct_xc.rs b/src/test/run-pass/aux/newtype_struct_xc.rs new file mode 100644 index 00000000000..be3414b7ad2 --- /dev/null +++ b/src/test/run-pass/aux/newtype_struct_xc.rs @@ -0,0 +1,13 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] + +pub struct Au(pub isize); diff --git a/src/test/run-pass/aux/overloaded_autoderef_xc.rs b/src/test/run-pass/aux/overloaded_autoderef_xc.rs new file mode 100644 index 00000000000..3c8cba13ae7 --- /dev/null +++ b/src/test/run-pass/aux/overloaded_autoderef_xc.rs @@ -0,0 +1,40 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use std::ops::Deref; + +struct DerefWithHelper { + pub helper: H, + pub value: Option +} + +trait Helper { + fn helper_borrow(&self) -> &T; +} + +impl Helper for Option { + fn helper_borrow(&self) -> &T { + self.as_ref().unwrap() + } +} + +impl> Deref for DerefWithHelper { + type Target = T; + + fn deref(&self) -> &T { + self.helper.helper_borrow() + } +} + +// Test cross-crate autoderef + vtable. +pub fn check(x: T, y: T) -> bool { + let d: DerefWithHelper, T> = DerefWithHelper { helper: Some(x), value: None }; + d.eq(&y) +} diff --git a/src/test/run-pass/aux/packed.rs b/src/test/run-pass/aux/packed.rs new file mode 100644 index 00000000000..86f5f93e3cf --- /dev/null +++ b/src/test/run-pass/aux/packed.rs @@ -0,0 +1,15 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[repr(packed)] +pub struct S { + a: u8, + b: u32 +} diff --git a/src/test/run-pass/aux/priv-impl-prim-ty.rs b/src/test/run-pass/aux/priv-impl-prim-ty.rs new file mode 100644 index 00000000000..19cdede5518 --- /dev/null +++ b/src/test/run-pass/aux/priv-impl-prim-ty.rs @@ -0,0 +1,19 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub trait A { + fn frob(&self); +} + +impl A for isize { fn frob(&self) {} } + +pub fn frob(t: T) { + t.frob(); +} diff --git a/src/test/run-pass/aux/privacy_reexport.rs b/src/test/run-pass/aux/privacy_reexport.rs new file mode 100644 index 00000000000..fd97f210a55 --- /dev/null +++ b/src/test/run-pass/aux/privacy_reexport.rs @@ -0,0 +1,16 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub extern crate core; +pub use foo as bar; + +pub mod foo { + pub fn frob() {} +} diff --git a/src/test/run-pass/aux/pub_use_mods_xcrate.rs b/src/test/run-pass/aux/pub_use_mods_xcrate.rs new file mode 100644 index 00000000000..e4890f4fe2d --- /dev/null +++ b/src/test/run-pass/aux/pub_use_mods_xcrate.rs @@ -0,0 +1,20 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub mod a { + pub use a::b::c; + + pub mod b { + pub mod c { + fn f(){} + fn g(){} + } + } +} diff --git a/src/test/run-pass/aux/pub_use_xcrate1.rs b/src/test/run-pass/aux/pub_use_xcrate1.rs new file mode 100644 index 00000000000..41aafd64cb3 --- /dev/null +++ b/src/test/run-pass/aux/pub_use_xcrate1.rs @@ -0,0 +1,13 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct Foo { + pub name: isize +} diff --git a/src/test/run-pass/aux/pub_use_xcrate2.rs b/src/test/run-pass/aux/pub_use_xcrate2.rs new file mode 100644 index 00000000000..d59d7f2a613 --- /dev/null +++ b/src/test/run-pass/aux/pub_use_xcrate2.rs @@ -0,0 +1,13 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +extern crate pub_use_xcrate1; + +pub use pub_use_xcrate1::Foo; diff --git a/src/test/run-pass/aux/reachable-unnameable-items.rs b/src/test/run-pass/aux/reachable-unnameable-items.rs new file mode 100644 index 00000000000..7ec2bb9394c --- /dev/null +++ b/src/test/run-pass/aux/reachable-unnameable-items.rs @@ -0,0 +1,116 @@ +// Copyright 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use inner_private_module::*; + +mod inner_private_module { + pub struct Unnameable1; + pub struct Unnameable2; + #[derive(Clone, Copy)] + pub struct Unnameable3; + pub struct Unnameable4; + pub struct Unnameable5; + pub struct Unnameable6; + pub struct Unnameable7; + #[derive(Default)] + pub struct Unnameable8; + pub enum UnnameableEnum { + NameableVariant + } + pub trait UnnameableTrait { + type Alias: Default; + } + + impl Unnameable1 { + pub fn method_of_unnameable_type1(&self) -> &'static str { + "Hello1" + } + } + impl Unnameable2 { + pub fn method_of_unnameable_type2(&self) -> &'static str { + "Hello2" + } + } + impl Unnameable3 { + pub fn method_of_unnameable_type3(&self) -> &'static str { + "Hello3" + } + } + impl Unnameable4 { + pub fn method_of_unnameable_type4(&self) -> &'static str { + "Hello4" + } + } + impl Unnameable5 { + pub fn method_of_unnameable_type5(&self) -> &'static str { + "Hello5" + } + } + impl Unnameable6 { + pub fn method_of_unnameable_type6(&self) -> &'static str { + "Hello6" + } + } + impl Unnameable7 { + pub fn method_of_unnameable_type7(&self) -> &'static str { + "Hello7" + } + } + impl Unnameable8 { + pub fn method_of_unnameable_type8(&self) -> &'static str { + "Hello8" + } + } + impl UnnameableEnum { + pub fn method_of_unnameable_enum(&self) -> &'static str { + "HelloEnum" + } + } +} + +pub fn function_returning_unnameable_type() -> Unnameable1 { + Unnameable1 +} + +pub const CONSTANT_OF_UNNAMEABLE_TYPE: Unnameable2 = + Unnameable2; + +pub fn function_accepting_unnameable_type(_: Option) {} + +pub type AliasOfUnnameableType = Unnameable4; + +impl Unnameable1 { + pub fn inherent_method_returning_unnameable_type(&self) -> Unnameable5 { + Unnameable5 + } +} + +pub trait Tr { + fn trait_method_returning_unnameable_type(&self) -> Unnameable6 { + Unnameable6 + } +} +impl Tr for Unnameable1 {} + +pub use inner_private_module::UnnameableEnum::NameableVariant; + +pub struct Struct { + pub field_of_unnameable_type: Unnameable7 +} + +pub static STATIC: Struct = Struct { field_of_unnameable_type: Unnameable7 } ; + +impl UnnameableTrait for AliasOfUnnameableType { + type Alias = Unnameable8; +} + +pub fn generic_function() -> T::Alias { + Default::default() +} diff --git a/src/test/run-pass/aux/reexport-should-still-link.rs b/src/test/run-pass/aux/reexport-should-still-link.rs new file mode 100644 index 00000000000..9d5464e6526 --- /dev/null +++ b/src/test/run-pass/aux/reexport-should-still-link.rs @@ -0,0 +1,15 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub use foo::bar; + +mod foo { + pub fn bar() {} +} diff --git a/src/test/run-pass/aux/reexported_static_methods.rs b/src/test/run-pass/aux/reexported_static_methods.rs new file mode 100644 index 00000000000..cc4db1a9581 --- /dev/null +++ b/src/test/run-pass/aux/reexported_static_methods.rs @@ -0,0 +1,53 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub use sub_foo::Foo; +pub use self::Bar as Baz; +pub use sub_foo::Boz; +pub use sub_foo::Bort; + +pub trait Bar { + fn bar() -> Self; +} + +impl Bar for isize { + fn bar() -> isize { 84 } +} + +pub mod sub_foo { + pub trait Foo { + fn foo() -> Self; + } + + impl Foo for isize { + fn foo() -> isize { 42 } + } + + pub struct Boz { + unused_str: String + } + + impl Boz { + pub fn boz(i: isize) -> bool { + i > 0 + } + } + + pub enum Bort { + Bort1, + Bort2 + } + + impl Bort { + pub fn bort() -> String { + "bort()".to_string() + } + } +} diff --git a/src/test/run-pass/aux/sepcomp-extern-lib.rs b/src/test/run-pass/aux/sepcomp-extern-lib.rs new file mode 100644 index 00000000000..72f1f73a81b --- /dev/null +++ b/src/test/run-pass/aux/sepcomp-extern-lib.rs @@ -0,0 +1,14 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[no_mangle] +pub extern "C" fn foo() -> usize { + 1234 +} diff --git a/src/test/run-pass/aux/sepcomp_cci_lib.rs b/src/test/run-pass/aux/sepcomp_cci_lib.rs new file mode 100644 index 00000000000..c57d161d8f5 --- /dev/null +++ b/src/test/run-pass/aux/sepcomp_cci_lib.rs @@ -0,0 +1,16 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[inline] +pub fn cci_fn() -> usize { + 1200 +} + +pub const CCI_CONST: usize = 34; diff --git a/src/test/run-pass/aux/sepcomp_lib.rs b/src/test/run-pass/aux/sepcomp_lib.rs new file mode 100644 index 00000000000..9aa16fb2694 --- /dev/null +++ b/src/test/run-pass/aux/sepcomp_lib.rs @@ -0,0 +1,31 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags: -C codegen-units=3 --crate-type=rlib,dylib + +pub mod a { + pub fn one() -> usize { + 1 + } +} + +pub mod b { + pub fn two() -> usize { + 2 + } +} + +pub mod c { + use a::one; + use b::two; + pub fn three() -> usize { + one() + two() + } +} diff --git a/src/test/run-pass/aux/static-function-pointer-aux.rs b/src/test/run-pass/aux/static-function-pointer-aux.rs new file mode 100644 index 00000000000..2ccdb4e0864 --- /dev/null +++ b/src/test/run-pass/aux/static-function-pointer-aux.rs @@ -0,0 +1,15 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + + +pub fn f(x: isize) -> isize { -x } + +pub static F: fn(isize) -> isize = f; +pub static mut MutF: fn(isize) -> isize = f; diff --git a/src/test/run-pass/aux/static-methods-crate.rs b/src/test/run-pass/aux/static-methods-crate.rs new file mode 100644 index 00000000000..b8fd59bf703 --- /dev/null +++ b/src/test/run-pass/aux/static-methods-crate.rs @@ -0,0 +1,39 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="static_methods_crate"] +#![crate_type = "lib"] + +pub trait read: Sized { + fn readMaybe(s: String) -> Option; +} + +impl read for isize { + fn readMaybe(s: String) -> Option { + s.parse().ok() + } +} + +impl read for bool { + fn readMaybe(s: String) -> Option { + match &*s { + "true" => Some(true), + "false" => Some(false), + _ => None + } + } +} + +pub fn read(s: String) -> T { + match read::readMaybe(s) { + Some(x) => x, + _ => panic!("read panicked!") + } +} diff --git a/src/test/run-pass/aux/static_fn_inline_xc_aux.rs b/src/test/run-pass/aux/static_fn_inline_xc_aux.rs new file mode 100644 index 00000000000..2193e12bceb --- /dev/null +++ b/src/test/run-pass/aux/static_fn_inline_xc_aux.rs @@ -0,0 +1,23 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + + +pub mod num { + pub trait Num2 { + fn from_int2(n: isize) -> Self; + } +} + +pub mod f64 { + impl ::num::Num2 for f64 { + #[inline] + fn from_int2(n: isize) -> f64 { return n as f64; } + } +} diff --git a/src/test/run-pass/aux/static_fn_trait_xc_aux.rs b/src/test/run-pass/aux/static_fn_trait_xc_aux.rs new file mode 100644 index 00000000000..44e875fbe3c --- /dev/null +++ b/src/test/run-pass/aux/static_fn_trait_xc_aux.rs @@ -0,0 +1,21 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub mod num { + pub trait Num2 { + fn from_int2(n: isize) -> Self; + } +} + +pub mod f64 { + impl ::num::Num2 for f64 { + fn from_int2(n: isize) -> f64 { return n as f64; } + } +} diff --git a/src/test/run-pass/aux/static_mut_xc.rs b/src/test/run-pass/aux/static_mut_xc.rs new file mode 100644 index 00000000000..9d677e3dc46 --- /dev/null +++ b/src/test/run-pass/aux/static_mut_xc.rs @@ -0,0 +1,11 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub static mut a: isize = 3; diff --git a/src/test/run-pass/aux/struct_destructuring_cross_crate.rs b/src/test/run-pass/aux/struct_destructuring_cross_crate.rs new file mode 100644 index 00000000000..26941b726d4 --- /dev/null +++ b/src/test/run-pass/aux/struct_destructuring_cross_crate.rs @@ -0,0 +1,16 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] + +pub struct S { + pub x: isize, + pub y: isize, +} diff --git a/src/test/run-pass/aux/struct_variant_xc_aux.rs b/src/test/run-pass/aux/struct_variant_xc_aux.rs new file mode 100644 index 00000000000..201f028b6b6 --- /dev/null +++ b/src/test/run-pass/aux/struct_variant_xc_aux.rs @@ -0,0 +1,18 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="struct_variant_xc_aux"] +#![crate_type = "lib"] + +#[derive(Copy, Clone)] +pub enum Enum { + Variant(u8), + StructVariant { arg: u8 } +} diff --git a/src/test/run-pass/aux/svh-a-base.rs b/src/test/run-pass/aux/svh-a-base.rs new file mode 100644 index 00000000000..31a97f695f0 --- /dev/null +++ b/src/test/run-pass/aux/svh-a-base.rs @@ -0,0 +1,35 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! The `svh-a-*.rs` files are all deviations from the base file +//! svh-a-base.rs with some difference (usually in `fn foo`) that +//! should not affect the strict version hash (SVH) computation +//! (#14132). + +#![crate_name = "a"] + +macro_rules! three { + () => { 3 } +} + +pub trait U {} +pub trait V {} +impl U for () {} +impl V for () {} + +static A_CONSTANT : isize = 2; + +pub fn foo(_: isize) -> isize { + 3 +} + +pub fn an_unused_name() -> isize { + 4 +} diff --git a/src/test/run-pass/aux/svh-a-comment.rs b/src/test/run-pass/aux/svh-a-comment.rs new file mode 100644 index 00000000000..22e40822eec --- /dev/null +++ b/src/test/run-pass/aux/svh-a-comment.rs @@ -0,0 +1,36 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! The `svh-a-*.rs` files are all deviations from the base file +//! svh-a-base.rs with some difference (usually in `fn foo`) that +//! should not affect the strict version hash (SVH) computation +//! (#14132). + +#![crate_name = "a"] + +macro_rules! three { + () => { 3 } +} + +pub trait U {} +pub trait V {} +impl U for () {} +impl V for () {} + +static A_CONSTANT : isize = 2; + +pub fn foo(_: isize) -> isize { + // a comment does not affect the svh + 3 +} + +pub fn an_unused_name() -> isize { + 4 +} diff --git a/src/test/run-pass/aux/svh-a-doc.rs b/src/test/run-pass/aux/svh-a-doc.rs new file mode 100644 index 00000000000..3d8a728967a --- /dev/null +++ b/src/test/run-pass/aux/svh-a-doc.rs @@ -0,0 +1,38 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! The `svh-a-*.rs` files are all deviations from the base file +//! svh-a-base.rs with some difference (usually in `fn foo`) that +//! should not affect the strict version hash (SVH) computation +//! (#14132). + +#![crate_name = "a"] + +macro_rules! three { + () => { 3 } +} + +pub trait U {} +pub trait V {} +impl U for () {} +impl V for () {} + +static A_CONSTANT : isize = 2; + +// Adding some documentation does not affect the svh. + +/// foo always returns three. +pub fn foo(_: isize) -> isize { + 3 +} + +pub fn an_unused_name() -> isize { + 4 +} diff --git a/src/test/run-pass/aux/svh-a-macro.rs b/src/test/run-pass/aux/svh-a-macro.rs new file mode 100644 index 00000000000..41d7eb7b186 --- /dev/null +++ b/src/test/run-pass/aux/svh-a-macro.rs @@ -0,0 +1,37 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! The `svh-a-*.rs` files are all deviations from the base file +//! svh-a-base.rs with some difference (usually in `fn foo`) that +//! should not affect the strict version hash (SVH) computation +//! (#14132). + +#![crate_name = "a"] + +macro_rules! three { + () => { 3 } +} + +pub trait U {} +pub trait V {} +impl U for () {} +impl V for () {} + +static A_CONSTANT : isize = 2; + +pub fn foo(_: isize) -> isize { + // a macro invocation in a function body does not affect the svh, + // as long as it yields the same code. + three!() +} + +pub fn an_unused_name() -> isize { + 4 +} diff --git a/src/test/run-pass/aux/svh-a-no-change.rs b/src/test/run-pass/aux/svh-a-no-change.rs new file mode 100644 index 00000000000..31a97f695f0 --- /dev/null +++ b/src/test/run-pass/aux/svh-a-no-change.rs @@ -0,0 +1,35 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! The `svh-a-*.rs` files are all deviations from the base file +//! svh-a-base.rs with some difference (usually in `fn foo`) that +//! should not affect the strict version hash (SVH) computation +//! (#14132). + +#![crate_name = "a"] + +macro_rules! three { + () => { 3 } +} + +pub trait U {} +pub trait V {} +impl U for () {} +impl V for () {} + +static A_CONSTANT : isize = 2; + +pub fn foo(_: isize) -> isize { + 3 +} + +pub fn an_unused_name() -> isize { + 4 +} diff --git a/src/test/run-pass/aux/svh-a-redundant-cfg.rs b/src/test/run-pass/aux/svh-a-redundant-cfg.rs new file mode 100644 index 00000000000..e405c337abe --- /dev/null +++ b/src/test/run-pass/aux/svh-a-redundant-cfg.rs @@ -0,0 +1,37 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! The `svh-a-*.rs` files are all deviations from the base file +//! svh-a-base.rs with some difference (usually in `fn foo`) that +//! should not affect the strict version hash (SVH) computation +//! (#14132). + +#![crate_name = "a"] + +macro_rules! three { + () => { 3 } +} + +pub trait U {} +pub trait V {} +impl U for () {} +impl V for () {} + +static A_CONSTANT : isize = 2; + +// cfg attribute does not affect the svh, as long as it yields the same code. +#[cfg(not(an_unused_name))] +pub fn foo(_: isize) -> isize { + 3 +} + +pub fn an_unused_name() -> isize { + 4 +} diff --git a/src/test/run-pass/aux/svh-a-whitespace.rs b/src/test/run-pass/aux/svh-a-whitespace.rs new file mode 100644 index 00000000000..9ef788c9842 --- /dev/null +++ b/src/test/run-pass/aux/svh-a-whitespace.rs @@ -0,0 +1,37 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! The `svh-a-*.rs` files are all deviations from the base file +//! svh-a-base.rs with some difference (usually in `fn foo`) that +//! should not affect the strict version hash (SVH) computation +//! (#14132). + +#![crate_name = "a"] + +macro_rules! three { + () => { 3 } +} + +pub trait U {} +pub trait V {} +impl U for () {} +impl V for () {} + +static A_CONSTANT : isize = 2; + +pub fn foo(_: isize) -> isize { + + 3 + +} + +pub fn an_unused_name() -> isize { + 4 +} diff --git a/src/test/run-pass/aux/svh-b.rs b/src/test/run-pass/aux/svh-b.rs new file mode 100644 index 00000000000..b8946fdc995 --- /dev/null +++ b/src/test/run-pass/aux/svh-b.rs @@ -0,0 +1,23 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! This is a client of the `a` crate defined in "svn-a-base.rs". The +//! rpass and cfail tests (such as "run-pass/svh-add-comment.rs") use +//! it by swapping in a different object code library crate built from +//! some variant of "svn-a-base.rs", and then we are checking if the +//! compiler properly ignores or accepts the change, based on whether +//! the change could affect the downstream crate content or not +//! (#14132). + +#![crate_name = "b"] + +extern crate a; + +pub fn foo() { assert_eq!(a::foo::<()>(0), 3); } diff --git a/src/test/run-pass/aux/thread-local-extern-static.rs b/src/test/run-pass/aux/thread-local-extern-static.rs new file mode 100644 index 00000000000..d1971a5e1ae --- /dev/null +++ b/src/test/run-pass/aux/thread-local-extern-static.rs @@ -0,0 +1,17 @@ +// Copyright 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(thread_local)] +#![feature(cfg_target_thread_local)] +#![crate_type = "lib"] + +#[no_mangle] +#[cfg_attr(target_thread_local, thread_local)] +pub static FOO: u32 = 3; diff --git a/src/test/run-pass/aux/trait_default_method_xc_aux.rs b/src/test/run-pass/aux/trait_default_method_xc_aux.rs new file mode 100644 index 00000000000..c1168a912dc --- /dev/null +++ b/src/test/run-pass/aux/trait_default_method_xc_aux.rs @@ -0,0 +1,50 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct Something { pub x: isize } + +pub trait A { + fn f(&self) -> isize; + fn g(&self) -> isize { 10 } + fn h(&self) -> isize { 11 } + fn lurr(x: &Self, y: &Self) -> isize { x.g() + y.h() } +} + + +impl A for isize { + fn f(&self) -> isize { 10 } +} + +impl A for Something { + fn f(&self) -> isize { 10 } +} + +pub trait B { + fn thing(&self, x: T, y: U) -> (T, U) { (x, y) } + fn staticthing(_z: &Self, x: T, y: U) -> (T, U) { (x, y) } +} + +impl B for isize { } +impl B for bool { } + + + +pub trait TestEquality { + fn test_eq(&self, rhs: &Self) -> bool; + fn test_neq(&self, rhs: &Self) -> bool { + !self.test_eq(rhs) + } +} + +impl TestEquality for isize { + fn test_eq(&self, rhs: &isize) -> bool { + *self == *rhs + } +} diff --git a/src/test/run-pass/aux/trait_default_method_xc_aux_2.rs b/src/test/run-pass/aux/trait_default_method_xc_aux_2.rs new file mode 100644 index 00000000000..7443ef9c0f3 --- /dev/null +++ b/src/test/run-pass/aux/trait_default_method_xc_aux_2.rs @@ -0,0 +1,27 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// aux-build:trait_default_method_xc_aux.rs + +extern crate trait_default_method_xc_aux as aux; +use aux::A; + +pub struct a_struct { pub x: isize } + +impl A for a_struct { + fn f(&self) -> isize { 10 } +} + +// This function will need to get inlined, and badness may result. +pub fn welp(x: A) -> A { + let a = a_struct { x: 0 }; + a.g(); + x +} diff --git a/src/test/run-pass/aux/trait_inheritance_auto_xc_2_aux.rs b/src/test/run-pass/aux/trait_inheritance_auto_xc_2_aux.rs new file mode 100644 index 00000000000..af0128d9676 --- /dev/null +++ b/src/test/run-pass/aux/trait_inheritance_auto_xc_2_aux.rs @@ -0,0 +1,19 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub trait Foo { fn f(&self) -> isize; } +pub trait Bar { fn g(&self) -> isize; } +pub trait Baz { fn h(&self) -> isize; } + +pub struct A { pub x: isize } + +impl Foo for A { fn f(&self) -> isize { 10 } } +impl Bar for A { fn g(&self) -> isize { 20 } } +impl Baz for A { fn h(&self) -> isize { 30 } } diff --git a/src/test/run-pass/aux/trait_inheritance_auto_xc_aux.rs b/src/test/run-pass/aux/trait_inheritance_auto_xc_aux.rs new file mode 100644 index 00000000000..6be1f8c45f4 --- /dev/null +++ b/src/test/run-pass/aux/trait_inheritance_auto_xc_aux.rs @@ -0,0 +1,17 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub trait Foo { fn f(&self) -> isize; } +pub trait Bar { fn g(&self) -> isize; } +pub trait Baz { fn h(&self) -> isize; } + +pub trait Quux: Foo + Bar + Baz { } + +impl Quux for T { } diff --git a/src/test/run-pass/aux/trait_inheritance_cross_trait_call_xc_aux.rs b/src/test/run-pass/aux/trait_inheritance_cross_trait_call_xc_aux.rs new file mode 100644 index 00000000000..9eeb815c5de --- /dev/null +++ b/src/test/run-pass/aux/trait_inheritance_cross_trait_call_xc_aux.rs @@ -0,0 +1,22 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + + +pub trait Foo { + fn f(&self) -> isize; +} + +pub struct A { + pub x: isize +} + +impl Foo for A { + fn f(&self) -> isize { 10 } +} diff --git a/src/test/run-pass/aux/trait_inheritance_overloading_xc.rs b/src/test/run-pass/aux/trait_inheritance_overloading_xc.rs new file mode 100644 index 00000000000..1bfada612eb --- /dev/null +++ b/src/test/run-pass/aux/trait_inheritance_overloading_xc.rs @@ -0,0 +1,48 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use std::cmp::PartialEq; +use std::ops::{Add, Sub, Mul}; + +pub trait MyNum : Add + Sub + Mul + PartialEq + Clone { +} + +#[derive(Clone, Debug)] +pub struct MyInt { + pub val: isize +} + +impl Add for MyInt { + type Output = MyInt; + + fn add(self, other: MyInt) -> MyInt { mi(self.val + other.val) } +} + +impl Sub for MyInt { + type Output = MyInt; + + fn sub(self, other: MyInt) -> MyInt { mi(self.val - other.val) } +} + +impl Mul for MyInt { + type Output = MyInt; + + fn mul(self, other: MyInt) -> MyInt { mi(self.val * other.val) } +} + +impl PartialEq for MyInt { + fn eq(&self, other: &MyInt) -> bool { self.val == other.val } + + fn ne(&self, other: &MyInt) -> bool { !self.eq(other) } +} + +impl MyNum for MyInt {} + +fn mi(v: isize) -> MyInt { MyInt { val: v } } diff --git a/src/test/run-pass/aux/trait_safety_lib.rs b/src/test/run-pass/aux/trait_safety_lib.rs new file mode 100644 index 00000000000..585a756fd07 --- /dev/null +++ b/src/test/run-pass/aux/trait_safety_lib.rs @@ -0,0 +1,19 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Simple smoke test that unsafe traits can be compiled etc. + +pub unsafe trait Foo { + fn foo(&self) -> isize; +} + +unsafe impl Foo for isize { + fn foo(&self) -> isize { *self } +} diff --git a/src/test/run-pass/aux/trait_superkinds_in_metadata.rs b/src/test/run-pass/aux/trait_superkinds_in_metadata.rs new file mode 100644 index 00000000000..0fa2d3459f4 --- /dev/null +++ b/src/test/run-pass/aux/trait_superkinds_in_metadata.rs @@ -0,0 +1,18 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Test library crate for cross-crate usages of traits inheriting +// from the builtin kinds. Mostly tests metadata correctness. + +#![crate_type="lib"] + +pub trait RequiresShare : Sync { } +pub trait RequiresRequiresShareAndSend : RequiresShare + Send { } +pub trait RequiresCopy : Copy { } diff --git a/src/test/run-pass/aux/traitimpl.rs b/src/test/run-pass/aux/traitimpl.rs new file mode 100644 index 00000000000..22e79cc6284 --- /dev/null +++ b/src/test/run-pass/aux/traitimpl.rs @@ -0,0 +1,17 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Test inherent trait impls work cross-crait. + +pub trait Bar<'a> : 'a {} + +impl<'a> Bar<'a> { + pub fn bar(&self) {} +} diff --git a/src/test/run-pass/aux/two_macros.rs b/src/test/run-pass/aux/two_macros.rs new file mode 100644 index 00000000000..060960f0dbc --- /dev/null +++ b/src/test/run-pass/aux/two_macros.rs @@ -0,0 +1,15 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[macro_export] +macro_rules! macro_one { () => ("one") } + +#[macro_export] +macro_rules! macro_two { () => ("two") } diff --git a/src/test/run-pass/aux/typeid-intrinsic-aux1.rs b/src/test/run-pass/aux/typeid-intrinsic-aux1.rs new file mode 100644 index 00000000000..388d3238d42 --- /dev/null +++ b/src/test/run-pass/aux/typeid-intrinsic-aux1.rs @@ -0,0 +1,34 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(core)] + +use std::any::{Any, TypeId}; + +pub struct A; +pub struct B(Option); +pub struct C(Option); +pub struct D(Option<&'static str>); +pub struct E(Result<&'static str, isize>); + +pub type F = Option; +pub type G = usize; +pub type H = &'static str; + +pub unsafe fn id_A() -> TypeId { TypeId::of::() } +pub unsafe fn id_B() -> TypeId { TypeId::of::() } +pub unsafe fn id_C() -> TypeId { TypeId::of::() } +pub unsafe fn id_D() -> TypeId { TypeId::of::() } +pub unsafe fn id_E() -> TypeId { TypeId::of::() } +pub unsafe fn id_F() -> TypeId { TypeId::of::() } +pub unsafe fn id_G() -> TypeId { TypeId::of::() } +pub unsafe fn id_H() -> TypeId { TypeId::of::() } + +pub unsafe fn foo() -> TypeId { TypeId::of::() } diff --git a/src/test/run-pass/aux/typeid-intrinsic-aux2.rs b/src/test/run-pass/aux/typeid-intrinsic-aux2.rs new file mode 100644 index 00000000000..3ad307fd3b5 --- /dev/null +++ b/src/test/run-pass/aux/typeid-intrinsic-aux2.rs @@ -0,0 +1,34 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(core)] + +use std::any::{Any, TypeId}; + +pub struct A; +pub struct B(Option); +pub struct C(Option); +pub struct D(Option<&'static str>); +pub struct E(Result<&'static str, isize>); + +pub type F = Option; +pub type G = usize; +pub type H = &'static str; + +pub unsafe fn id_A() -> TypeId { TypeId::of::() } +pub unsafe fn id_B() -> TypeId { TypeId::of::() } +pub unsafe fn id_C() -> TypeId { TypeId::of::() } +pub unsafe fn id_D() -> TypeId { TypeId::of::() } +pub unsafe fn id_E() -> TypeId { TypeId::of::() } +pub unsafe fn id_F() -> TypeId { TypeId::of::() } +pub unsafe fn id_G() -> TypeId { TypeId::of::() } +pub unsafe fn id_H() -> TypeId { TypeId::of::() } + +pub unsafe fn foo() -> TypeId { TypeId::of::() } diff --git a/src/test/run-pass/aux/unboxed-closures-cross-crate.rs b/src/test/run-pass/aux/unboxed-closures-cross-crate.rs new file mode 100644 index 00000000000..dac20dd2f7a --- /dev/null +++ b/src/test/run-pass/aux/unboxed-closures-cross-crate.rs @@ -0,0 +1,28 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(unboxed_closures)] + +use std::ops::Add; + +#[inline] +pub fn has_closures() -> usize { + let x = 1; + let mut f = move || x; + let y = 1; + let g = || y; + f() + g() +} + +pub fn has_generic_closures + Copy>(x: T, y: T) -> T { + let mut f = move || x; + let g = || y; + f() + g() +} diff --git a/src/test/run-pass/aux/weak-lang-items.rs b/src/test/run-pass/aux/weak-lang-items.rs new file mode 100644 index 00000000000..6434e62b6f7 --- /dev/null +++ b/src/test/run-pass/aux/weak-lang-items.rs @@ -0,0 +1,32 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// no-prefer-dynamic + +// This aux-file will require the eh_personality function to be codegen'd, but +// it hasn't been defined just yet. Make sure we don't explode. + +#![no_std] +#![crate_type = "rlib"] + +struct A; + +impl core::ops::Drop for A { + fn drop(&mut self) {} +} + +pub fn foo() { + let _a = A; + panic!("wut"); +} + +mod std { + pub use core::{option, fmt}; +} diff --git a/src/test/run-pass/aux/where_clauses_xc.rs b/src/test/run-pass/aux/where_clauses_xc.rs new file mode 100644 index 00000000000..4549bd719c6 --- /dev/null +++ b/src/test/run-pass/aux/where_clauses_xc.rs @@ -0,0 +1,29 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub trait Equal { + fn equal(&self, other: &Self) -> bool; + fn equals(&self, this: &T, that: &T, x: &U, y: &U) -> bool + where T: Eq, U: Eq; +} + +impl Equal for T where T: Eq { + fn equal(&self, other: &T) -> bool { + self == other + } + fn equals(&self, this: &U, other: &U, x: &X, y: &X) -> bool + where U: Eq, X: Eq { + this == other && x == y + } +} + +pub fn equal(x: &T, y: &T) -> bool where T: Eq { + x == y +} diff --git a/src/test/run-pass/aux/xcrate-trait-lifetime-param.rs b/src/test/run-pass/aux/xcrate-trait-lifetime-param.rs new file mode 100644 index 00000000000..e8e5cc53aa3 --- /dev/null +++ b/src/test/run-pass/aux/xcrate-trait-lifetime-param.rs @@ -0,0 +1,13 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub trait FromBuf<'a> { + fn from_buf(&'a [u8]) -> Self; +} diff --git a/src/test/run-pass/aux/xcrate_address_insignificant.rs b/src/test/run-pass/aux/xcrate_address_insignificant.rs new file mode 100644 index 00000000000..5195839c067 --- /dev/null +++ b/src/test/run-pass/aux/xcrate_address_insignificant.rs @@ -0,0 +1,18 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn foo() -> isize { + static a: isize = 3; + a +} + +pub fn bar() -> isize { + foo::() +} diff --git a/src/test/run-pass/aux/xcrate_associated_type_defaults.rs b/src/test/run-pass/aux/xcrate_associated_type_defaults.rs new file mode 100644 index 00000000000..6779438c672 --- /dev/null +++ b/src/test/run-pass/aux/xcrate_associated_type_defaults.rs @@ -0,0 +1,22 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(associated_type_defaults)] + +pub trait Foo { + type Out: Default + ToString = T; +} + +impl Foo for () { +} + +impl Foo for () { + type Out = bool; +} diff --git a/src/test/run-pass/aux/xcrate_static_addresses.rs b/src/test/run-pass/aux/xcrate_static_addresses.rs new file mode 100644 index 00000000000..d0da80e31b9 --- /dev/null +++ b/src/test/run-pass/aux/xcrate_static_addresses.rs @@ -0,0 +1,27 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub static global: isize = 3; + +static global0: isize = 4; + +pub static global2: &'static isize = &global0; + +pub fn verify_same(a: &'static isize) { + let a = a as *const isize as usize; + let b = &global as *const isize as usize; + assert_eq!(a, b); +} + +pub fn verify_same2(a: &'static isize) { + let a = a as *const isize as usize; + let b = global2 as *const isize as usize; + assert_eq!(a, b); +} diff --git a/src/test/run-pass/aux/xcrate_struct_aliases.rs b/src/test/run-pass/aux/xcrate_struct_aliases.rs new file mode 100644 index 00000000000..334f7829bd1 --- /dev/null +++ b/src/test/run-pass/aux/xcrate_struct_aliases.rs @@ -0,0 +1,16 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct S { + pub x: isize, + pub y: isize, +} + +pub type S2 = S; diff --git a/src/test/run-pass/aux/xcrate_unit_struct.rs b/src/test/run-pass/aux/xcrate_unit_struct.rs new file mode 100644 index 00000000000..7a69be2b06c --- /dev/null +++ b/src/test/run-pass/aux/xcrate_unit_struct.rs @@ -0,0 +1,38 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "lib"] + +// used by the rpass test + +#[derive(Copy, Clone)] +pub struct Struct; + +#[derive(Copy, Clone)] +pub enum Unit { + UnitVariant, + Argument(Struct) +} + +#[derive(Copy, Clone)] +pub struct TupleStruct(pub usize, pub &'static str); + +// used by the cfail test + +#[derive(Copy, Clone)] +pub struct StructWithFields { + foo: isize, +} + +#[derive(Copy, Clone)] +pub enum EnumWithVariants { + EnumVariant, + EnumVariantArg(isize) +} diff --git a/src/test/run-pass/import-crate-with-invalid-spans/aux/crate_with_invalid_spans.rs b/src/test/run-pass/import-crate-with-invalid-spans/aux/crate_with_invalid_spans.rs new file mode 100644 index 00000000000..b37533d2da7 --- /dev/null +++ b/src/test/run-pass/import-crate-with-invalid-spans/aux/crate_with_invalid_spans.rs @@ -0,0 +1,30 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "rlib"] +// no-prefer-dynamic + +// compile-flags: -g + +#[macro_use] +mod crate_with_invalid_spans_macros; + +pub fn exported_generic(x: T, y: u32) -> (T, u32) { + // Using the add1 macro will produce an invalid span, because the `y` passed + // to the macro will have a span from this file, but the rest of the code + // generated from the macro will have spans from the macro-defining file. + // The AST node for the (1 + y) expression generated by the macro will then + // take it's `lo` span bound from the `1` literal in the macro-defining file + // and it's `hi` bound from `y` in this file, which should be lower than the + // `lo` and even lower than the lower bound of the FileMap it is supposedly + // contained in because the FileMap for this file was allocated earlier than + // the FileMap of the macro-defining file. + return (x, add1!(y)); +} diff --git a/src/test/auxiliary/crate_with_invalid_spans_macros.rs b/src/test/run-pass/import-crate-with-invalid-spans/aux/crate_with_invalid_spans_macros.rs similarity index 100% rename from src/test/auxiliary/crate_with_invalid_spans_macros.rs rename to src/test/run-pass/import-crate-with-invalid-spans/aux/crate_with_invalid_spans_macros.rs diff --git a/src/test/run-pass/import-crate-with-invalid-spans.rs b/src/test/run-pass/import-crate-with-invalid-spans/main.rs similarity index 100% rename from src/test/run-pass/import-crate-with-invalid-spans.rs rename to src/test/run-pass/import-crate-with-invalid-spans/main.rs diff --git a/src/test/run-pass/issue24687-embed-debuginfo/aux/issue24687_lib.rs b/src/test/run-pass/issue24687-embed-debuginfo/aux/issue24687_lib.rs new file mode 100644 index 00000000000..f1624fd2e58 --- /dev/null +++ b/src/test/run-pass/issue24687-embed-debuginfo/aux/issue24687_lib.rs @@ -0,0 +1,20 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] + +// This is a file that pulls in a separate file as a submodule, where +// that separate file has many multi-byte characters, to try to +// encourage the compiler to trip on them. + +mod issue24687_mbcs_in_comments; + +pub use issue24687_mbcs_in_comments::D; + diff --git a/src/test/auxiliary/issue24687_mbcs_in_comments.rs b/src/test/run-pass/issue24687-embed-debuginfo/aux/issue24687_mbcs_in_comments.rs similarity index 100% rename from src/test/auxiliary/issue24687_mbcs_in_comments.rs rename to src/test/run-pass/issue24687-embed-debuginfo/aux/issue24687_mbcs_in_comments.rs diff --git a/src/test/run-pass/issue24687-embed-debuginfo.rs b/src/test/run-pass/issue24687-embed-debuginfo/main.rs similarity index 100% rename from src/test/run-pass/issue24687-embed-debuginfo.rs rename to src/test/run-pass/issue24687-embed-debuginfo/main.rs diff --git a/src/test/run-pass/specialization/aux/go_trait.rs b/src/test/run-pass/specialization/aux/go_trait.rs new file mode 100644 index 00000000000..044bb606b40 --- /dev/null +++ b/src/test/run-pass/specialization/aux/go_trait.rs @@ -0,0 +1,53 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(specialization)] + +// Common code used for tests that model the Fn/FnMut/FnOnce hierarchy. + +pub trait Go { + fn go(&self, arg: isize); +} + +pub fn go(this: &G, arg: isize) { + this.go(arg) +} + +pub trait GoMut { + fn go_mut(&mut self, arg: isize); +} + +pub fn go_mut(this: &mut G, arg: isize) { + this.go_mut(arg) +} + +pub trait GoOnce { + fn go_once(self, arg: isize); +} + +pub fn go_once(this: G, arg: isize) { + this.go_once(arg) +} + +impl GoMut for G + where G : Go +{ + default fn go_mut(&mut self, arg: isize) { + go(&*self, arg) + } +} + +impl GoOnce for G + where G : GoMut +{ + default fn go_once(mut self, arg: isize) { + go_mut(&mut self, arg) + } +} diff --git a/src/test/run-pass/specialization/aux/specialization_cross_crate.rs b/src/test/run-pass/specialization/aux/specialization_cross_crate.rs new file mode 100644 index 00000000000..1d235336de8 --- /dev/null +++ b/src/test/run-pass/specialization/aux/specialization_cross_crate.rs @@ -0,0 +1,82 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(specialization)] + +pub trait Foo { + fn foo(&self) -> &'static str; +} + +impl Foo for T { + default fn foo(&self) -> &'static str { + "generic" + } +} + +impl Foo for T { + default fn foo(&self) -> &'static str { + "generic Clone" + } +} + +impl Foo for (T, U) where T: Clone, U: Clone { + default fn foo(&self) -> &'static str { + "generic pair" + } +} + +impl Foo for (T, T) { + default fn foo(&self) -> &'static str { + "generic uniform pair" + } +} + +impl Foo for (u8, u32) { + default fn foo(&self) -> &'static str { + "(u8, u32)" + } +} + +impl Foo for (u8, u8) { + default fn foo(&self) -> &'static str { + "(u8, u8)" + } +} + +impl Foo for Vec { + default fn foo(&self) -> &'static str { + "generic Vec" + } +} + +impl Foo for Vec { + fn foo(&self) -> &'static str { + "Vec" + } +} + +impl Foo for String { + fn foo(&self) -> &'static str { + "String" + } +} + +impl Foo for i32 { + fn foo(&self) -> &'static str { + "i32" + } +} + +pub trait MyMarker {} +impl Foo for T { + default fn foo(&self) -> &'static str { + "generic Clone + MyMarker" + } +} diff --git a/src/test/run-pass/specialization/aux/specialization_cross_crate_defaults.rs b/src/test/run-pass/specialization/aux/specialization_cross_crate_defaults.rs new file mode 100644 index 00000000000..b62d80b589f --- /dev/null +++ b/src/test/run-pass/specialization/aux/specialization_cross_crate_defaults.rs @@ -0,0 +1,49 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + + +#![feature(specialization)] + +// First, test only use of explicit `default` items: + +pub trait Foo { + fn foo(&self) -> bool; +} + +impl Foo for T { + default fn foo(&self) -> bool { false } +} + +impl Foo for i32 {} + +impl Foo for i64 { + fn foo(&self) -> bool { true } +} + +// Next, test mixture of explicit `default` and provided methods: + +pub trait Bar { + fn bar(&self) -> i32 { 0 } +} + +impl Bar for T {} // use the provided method + +impl Bar for i32 { + fn bar(&self) -> i32 { 1 } +} +impl<'a> Bar for &'a str {} + +impl Bar for Vec { + default fn bar(&self) -> i32 { 2 } +} +impl Bar for Vec {} +impl Bar for Vec { + fn bar(&self) -> i32 { 3 } +} diff --git a/src/test/rustdoc/aux/empty.rs b/src/test/rustdoc/aux/empty.rs new file mode 100644 index 00000000000..30669470522 --- /dev/null +++ b/src/test/rustdoc/aux/empty.rs @@ -0,0 +1,9 @@ +// Copyright 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. diff --git a/src/test/rustdoc/aux/inline-default-methods.rs b/src/test/rustdoc/aux/inline-default-methods.rs new file mode 100644 index 00000000000..e21e6ad2043 --- /dev/null +++ b/src/test/rustdoc/aux/inline-default-methods.rs @@ -0,0 +1,16 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags: -Cmetadata=aux + +pub trait Foo { + fn bar(&self); + fn foo(&mut self) {} +} diff --git a/src/test/rustdoc/aux/issue-13698.rs b/src/test/rustdoc/aux/issue-13698.rs new file mode 100644 index 00000000000..ecddfe99b3b --- /dev/null +++ b/src/test/rustdoc/aux/issue-13698.rs @@ -0,0 +1,18 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags: -Cmetadata=aux + +pub trait Foo { + #[doc(hidden)] + fn foo(&self) {} +} + +impl Foo for i32 {} diff --git a/src/test/rustdoc/aux/issue-15318.rs b/src/test/rustdoc/aux/issue-15318.rs new file mode 100644 index 00000000000..145b4df6299 --- /dev/null +++ b/src/test/rustdoc/aux/issue-15318.rs @@ -0,0 +1,17 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags: -Cmetadata=aux + +#![doc(html_root_url = "http://example.com/")] + +/// dox +#[doc(primitive = "pointer")] +pub mod ptr {} diff --git a/src/test/rustdoc/aux/issue-17476.rs b/src/test/rustdoc/aux/issue-17476.rs new file mode 100644 index 00000000000..644d1634e9d --- /dev/null +++ b/src/test/rustdoc/aux/issue-17476.rs @@ -0,0 +1,17 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags: -Cmetadata=aux + +#![doc(html_root_url = "http://example.com")] + +pub trait Foo { + fn foo(&self) {} +} diff --git a/src/test/rustdoc/aux/issue-19190-3.rs b/src/test/rustdoc/aux/issue-19190-3.rs new file mode 100644 index 00000000000..2c9271202a6 --- /dev/null +++ b/src/test/rustdoc/aux/issue-19190-3.rs @@ -0,0 +1,33 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags: -Cmetadata=aux + +use std::ops::Deref; + +pub struct Foo; + +impl Deref for Foo { + type Target = i32; + fn deref(&self) -> &i32 { loop {} } +} + +pub struct Bar; +pub struct Baz; + +impl Baz { + pub fn baz(&self) {} + pub fn static_baz() {} +} + +impl Deref for Bar { + type Target = Baz; + fn deref(&self) -> &Baz { loop {} } +} diff --git a/src/test/rustdoc/aux/issue-20646.rs b/src/test/rustdoc/aux/issue-20646.rs new file mode 100644 index 00000000000..815b78a91d9 --- /dev/null +++ b/src/test/rustdoc/aux/issue-20646.rs @@ -0,0 +1,17 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags: -Cmetadata=aux + +pub trait Trait { + type Output; +} + +pub fn fun(_: T) where T: Trait {} diff --git a/src/test/rustdoc/aux/issue-20727.rs b/src/test/rustdoc/aux/issue-20727.rs new file mode 100644 index 00000000000..2ec761fad96 --- /dev/null +++ b/src/test/rustdoc/aux/issue-20727.rs @@ -0,0 +1,40 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags: -Cmetadata=aux + +pub trait Deref { + type Target: ?Sized; + + fn deref<'a>(&'a self) -> &'a Self::Target; +} + +pub trait Add { + type Output; + + fn add(self, rhs: RHS) -> Self::Output; +} + + +pub trait Bar {} +pub trait Deref2 { + type Target: Bar; + + fn deref(&self) -> Self::Target; +} + +pub trait Index { + type Output: ?Sized; + fn index(&self, index: Idx) -> &Self::Output; +} + +pub trait IndexMut: Index { + fn index_mut(&mut self, index: Idx) -> &mut Self::Output; +} diff --git a/src/test/rustdoc/aux/issue-21092.rs b/src/test/rustdoc/aux/issue-21092.rs new file mode 100644 index 00000000000..e906311e3ae --- /dev/null +++ b/src/test/rustdoc/aux/issue-21092.rs @@ -0,0 +1,22 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags: -Cmetadata=aux + +pub trait Foo { + type Bar; + fn foo(&self) {} +} + +pub struct Bar; + +impl Foo for Bar { + type Bar = i32; +} diff --git a/src/test/rustdoc/aux/issue-21801.rs b/src/test/rustdoc/aux/issue-21801.rs new file mode 100644 index 00000000000..f618edec598 --- /dev/null +++ b/src/test/rustdoc/aux/issue-21801.rs @@ -0,0 +1,19 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags: -Cmetadata=aux + +pub struct Foo; + +impl Foo { + pub fn new(f: F) -> Foo where F: FnMut() -> i32 { + loop {} + } +} diff --git a/src/test/rustdoc/aux/issue-22025.rs b/src/test/rustdoc/aux/issue-22025.rs new file mode 100644 index 00000000000..35a37e27d91 --- /dev/null +++ b/src/test/rustdoc/aux/issue-22025.rs @@ -0,0 +1,20 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags: -Cmetadata=aux + +pub mod foo { + + pub trait Foo {} + pub struct Bar; + + impl Foo for Bar {} + +} diff --git a/src/test/rustdoc/aux/issue-23207-1.rs b/src/test/rustdoc/aux/issue-23207-1.rs new file mode 100644 index 00000000000..ec9f2004ebf --- /dev/null +++ b/src/test/rustdoc/aux/issue-23207-1.rs @@ -0,0 +1,13 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub mod fmt { + pub struct Error; +} diff --git a/src/test/rustdoc/aux/issue-23207-2.rs b/src/test/rustdoc/aux/issue-23207-2.rs new file mode 100644 index 00000000000..5e9c540ab69 --- /dev/null +++ b/src/test/rustdoc/aux/issue-23207-2.rs @@ -0,0 +1,16 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +extern crate issue_23207_1; + +pub mod fmt { + pub use issue_23207_1::fmt::Error; +} + diff --git a/src/test/rustdoc/aux/issue-26606-macro.rs b/src/test/rustdoc/aux/issue-26606-macro.rs new file mode 100644 index 00000000000..6059a252bce --- /dev/null +++ b/src/test/rustdoc/aux/issue-26606-macro.rs @@ -0,0 +1,14 @@ +// Copyright 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[macro_export] +macro_rules! make_item ( + ($name: ident) => (pub const $name: usize = 42;) +); diff --git a/src/test/rustdoc/aux/issue-27362.rs b/src/test/rustdoc/aux/issue-27362.rs new file mode 100644 index 00000000000..25de698cad1 --- /dev/null +++ b/src/test/rustdoc/aux/issue-27362.rs @@ -0,0 +1,22 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags: -Cmetadata=aux + +#![feature(const_fn)] + +pub const fn foo() {} +pub const unsafe fn bar() {} + +pub struct Foo; + +impl Foo { + pub const unsafe fn baz() {} +} diff --git a/src/test/rustdoc/aux/issue-28927-1.rs b/src/test/rustdoc/aux/issue-28927-1.rs new file mode 100644 index 00000000000..7d6b448df43 --- /dev/null +++ b/src/test/rustdoc/aux/issue-28927-1.rs @@ -0,0 +1,12 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +extern crate issue_28927_2 as inner2; +pub use inner2 as bar; diff --git a/src/test/rustdoc/aux/issue-28927-2.rs b/src/test/rustdoc/aux/issue-28927-2.rs new file mode 100644 index 00000000000..c5117005049 --- /dev/null +++ b/src/test/rustdoc/aux/issue-28927-2.rs @@ -0,0 +1,11 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct Baz; diff --git a/src/test/rustdoc/aux/issue-29584.rs b/src/test/rustdoc/aux/issue-29584.rs new file mode 100644 index 00000000000..63c79f875ef --- /dev/null +++ b/src/test/rustdoc/aux/issue-29584.rs @@ -0,0 +1,20 @@ +// Copyright 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags: -Cmetadata=aux + +pub struct Foo; + +#[doc(hidden)] +mod bar { + trait Bar {} + + impl Bar for ::Foo {} +} diff --git a/src/test/rustdoc/aux/issue-30109-1.rs b/src/test/rustdoc/aux/issue-30109-1.rs new file mode 100644 index 00000000000..59f952a0b29 --- /dev/null +++ b/src/test/rustdoc/aux/issue-30109-1.rs @@ -0,0 +1,11 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct Bar; diff --git a/src/test/rustdoc/aux/reexp_stripped.rs b/src/test/rustdoc/aux/reexp_stripped.rs new file mode 100644 index 00000000000..2b061e3997d --- /dev/null +++ b/src/test/rustdoc/aux/reexp_stripped.rs @@ -0,0 +1,21 @@ +// Copyright 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub use private::Quz; +pub use hidden::Bar; + +mod private { + pub struct Quz; +} + +#[doc(hidden)] +pub mod hidden { + pub struct Bar; +} diff --git a/src/test/rustdoc/aux/rustdoc-default-impl.rs b/src/test/rustdoc/aux/rustdoc-default-impl.rs new file mode 100644 index 00000000000..c2ff7a0054f --- /dev/null +++ b/src/test/rustdoc/aux/rustdoc-default-impl.rs @@ -0,0 +1,36 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(optin_builtin_traits)] +#![feature(core)] + +pub mod bar { + use std::marker; + + pub trait Bar: 'static {} + + impl Bar for .. {} + + pub trait Foo { + fn foo(&self) {} + } + + impl Foo { + pub fn test(&self) {} + } + + pub struct TypeId; + + impl TypeId { + pub fn of() -> TypeId { + panic!() + } + } +} diff --git a/src/test/rustdoc/aux/rustdoc-extern-default-method.rs b/src/test/rustdoc/aux/rustdoc-extern-default-method.rs new file mode 100644 index 00000000000..861562753f9 --- /dev/null +++ b/src/test/rustdoc/aux/rustdoc-extern-default-method.rs @@ -0,0 +1,21 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] + +pub trait Trait { + fn provided(&self) {} +} + +pub struct Struct; + +impl Trait for Struct { + fn provided(&self) {} +} diff --git a/src/test/rustdoc/aux/rustdoc-extern-method.rs b/src/test/rustdoc/aux/rustdoc-extern-method.rs new file mode 100644 index 00000000000..96a7a8378b7 --- /dev/null +++ b/src/test/rustdoc/aux/rustdoc-extern-method.rs @@ -0,0 +1,17 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] +#![feature(unboxed_closures)] + +pub trait Foo { + extern "rust-call" fn foo(&self, _: ()) -> i32; + extern "rust-call" fn foo_(&self, _: ()) -> i32 { 0 } +} diff --git a/src/test/rustdoc/aux/rustdoc-ffi.rs b/src/test/rustdoc/aux/rustdoc-ffi.rs new file mode 100644 index 00000000000..e06dbe76dbb --- /dev/null +++ b/src/test/rustdoc/aux/rustdoc-ffi.rs @@ -0,0 +1,16 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="lib"] + +extern "C" { + // @has lib/fn.foreigner.html //pre 'pub unsafe fn foreigner(cold_as_ice: u32)' + pub fn foreigner(cold_as_ice: u32); +} diff --git a/src/test/rustdoc/aux/rustdoc-impl-parts-crosscrate.rs b/src/test/rustdoc/aux/rustdoc-impl-parts-crosscrate.rs new file mode 100644 index 00000000000..6e8f80c8f5f --- /dev/null +++ b/src/test/rustdoc/aux/rustdoc-impl-parts-crosscrate.rs @@ -0,0 +1,15 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(optin_builtin_traits)] + +pub trait AnOibit {} + +impl AnOibit for .. {} diff --git a/src/test/rustdoc/aux/variant-struct.rs b/src/test/rustdoc/aux/variant-struct.rs new file mode 100644 index 00000000000..d846c0adf61 --- /dev/null +++ b/src/test/rustdoc/aux/variant-struct.rs @@ -0,0 +1,15 @@ +// Copyright 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub enum Foo { + Bar { + qux: (), + } +} diff --git a/src/test/rustdoc/inline_cross/aux/rustdoc-hidden-sig.rs b/src/test/rustdoc/inline_cross/aux/rustdoc-hidden-sig.rs new file mode 100644 index 00000000000..e2bc153ce0d --- /dev/null +++ b/src/test/rustdoc/inline_cross/aux/rustdoc-hidden-sig.rs @@ -0,0 +1,22 @@ +// Copyright 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct Bar; + +impl Bar { + pub fn bar(_: u8) -> hidden::Hidden { + hidden::Hidden + } +} + +#[doc(hidden)] +pub mod hidden { + pub struct Hidden; +} diff --git a/src/test/rustdoc/inline_cross/aux/rustdoc-nonreachable-impls.rs b/src/test/rustdoc/inline_cross/aux/rustdoc-nonreachable-impls.rs new file mode 100644 index 00000000000..22a311d5797 --- /dev/null +++ b/src/test/rustdoc/inline_cross/aux/rustdoc-nonreachable-impls.rs @@ -0,0 +1,44 @@ +// Copyright 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct Foo; + +pub trait Woof {} +pub trait Bark {} + +mod private { + // should be shown + impl ::Woof for ::Foo {} + + pub trait Bar {} + pub struct Wibble; + + // these should not be shown + impl Bar for ::Foo {} + impl Bar for Wibble {} + impl ::Bark for Wibble {} + impl ::Woof for Wibble {} +} + +#[doc(hidden)] +pub mod hidden { + // should be shown + impl ::Bark for ::Foo {} + + pub trait Qux {} + pub struct Wobble; + + + // these should only be shown if they're reexported correctly + impl Qux for ::Foo {} + impl Qux for Wobble {} + impl ::Bark for Wobble {} + impl ::Woof for Wobble {} +} diff --git a/src/tools/compiletest/src/header.rs b/src/tools/compiletest/src/header.rs index d75b3b71a99..b5cebe2e3ea 100644 --- a/src/tools/compiletest/src/header.rs +++ b/src/tools/compiletest/src/header.rs @@ -134,7 +134,9 @@ pub struct TestProps { // If present, the name of a file that this test should match when // pretty-printed pub pp_exact: Option, - // Modules from aux directory that should be compiled + // Other crates that should be compiled (typically from the same + // directory as the test, but for backwards compatibility reasons + // we also check the auxiliary directory) pub aux_builds: Vec , // Environment settings to use for compiling pub rustc_env: Vec<(String,String)> , diff --git a/src/tools/compiletest/src/main.rs b/src/tools/compiletest/src/main.rs index 45c69eec542..3ab08021717 100644 --- a/src/tools/compiletest/src/main.rs +++ b/src/tools/compiletest/src/main.rs @@ -30,6 +30,7 @@ extern crate log; extern crate env_logger; use std::env; +use std::ffi::OsString; use std::fs; use std::io; use std::path::{Path, PathBuf}; @@ -335,21 +336,24 @@ fn collect_tests_from_dir(config: &Config, } } + // If we find a test foo/bar.rs, we have to build the + // output directory `$build/foo` so we can write + // `$build/foo/bar` into it. We do this *now* in this + // sequential loop because otherwise, if we do it in the + // tests themselves, they race for the privilege of + // creating the directories and sometimes fail randomly. + let build_dir = config.build_base.join(&relative_dir_path); + fs::create_dir_all(&build_dir).unwrap(); + + // Add each `.rs` file as a test, and recurse further on any + // subdirectories we find, except for `aux` directories. let dirs = fs::read_dir(dir)?; for file in dirs { let file = file?; let file_path = file.path(); - debug!("inspecting file {:?}", file_path.display()); - if is_test(config, &file_path) { - // If we find a test foo/bar.rs, we have to build the - // output directory `$build/foo` so we can write - // `$build/foo/bar` into it. We do this *now* in this - // sequential loop because otherwise, if we do it in the - // tests themselves, they race for the privilege of - // creating the directories and sometimes fail randomly. - let build_dir = config.build_base.join(&relative_dir_path); - fs::create_dir_all(&build_dir).unwrap(); - + let file_name = file.file_name(); + if is_test(&file_name) { + debug!("found test file: {:?}", file_path.display()); let paths = TestPaths { file: file_path, base: base.to_path_buf(), @@ -358,41 +362,39 @@ fn collect_tests_from_dir(config: &Config, tests.push(make_test(config, &paths)) } else if file_path.is_dir() { let relative_file_path = relative_dir_path.join(file.file_name()); - collect_tests_from_dir(config, - base, - &file_path, - &relative_file_path, - tests)?; + if &file_name == "aux" { + // `aux` directories contain other crates used for + // cross-crate tests. Don't search them for tests, but + // do create a directory in the build dir for them, + // since we will dump intermediate output in there + // sometimes. + let build_dir = config.build_base.join(&relative_file_path); + fs::create_dir_all(&build_dir).unwrap(); + } else { + debug!("found directory: {:?}", file_path.display()); + collect_tests_from_dir(config, + base, + &file_path, + &relative_file_path, + tests)?; + } + } else { + debug!("found other file/directory: {:?}", file_path.display()); } } Ok(()) } -pub fn is_test(config: &Config, testfile: &Path) -> bool { - // Pretty-printer does not work with .rc files yet - let valid_extensions = - match config.mode { - Pretty => vec!(".rs".to_owned()), - _ => vec!(".rc".to_owned(), ".rs".to_owned()) - }; - let invalid_prefixes = vec!(".".to_owned(), "#".to_owned(), "~".to_owned()); - let name = testfile.file_name().unwrap().to_str().unwrap(); +pub fn is_test(file_name: &OsString) -> bool { + let file_name = file_name.to_str().unwrap(); - let mut valid = false; - - for ext in &valid_extensions { - if name.ends_with(ext) { - valid = true; - } + if !file_name.ends_with(".rs") { + return false; } - for pre in &invalid_prefixes { - if name.starts_with(pre) { - valid = false; - } - } - - return valid; + // `.`, `#`, and `~` are common temp-file prefixes. + let invalid_prefixes = &[".", "#", "~"]; + !invalid_prefixes.iter().any(|p| file_name.starts_with(p)) } pub fn make_test(config: &Config, testpaths: &TestPaths) -> test::TestDescAndFn { diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs index 98dfdb08a7f..858cecf8612 100644 --- a/src/tools/compiletest/src/runtest.rs +++ b/src/tools/compiletest/src/runtest.rs @@ -1147,14 +1147,27 @@ actual:\n\ } } + /// For each `aux-build: foo/bar` annotation, we check to find the + /// file in a `aux` directory relative to the test itself. fn compute_aux_test_paths(&self, rel_ab: &str) -> TestPaths { - let abs_ab = self.config.aux_base.join(rel_ab); + let test_ab = self.testpaths.file + .parent() + .expect("test file path has no parent") + .join("aux") + .join(rel_ab); + if !test_ab.exists() { + self.fatal(&format!("aux-build `{}` source not found", test_ab.display())) + } + TestPaths { - file: abs_ab, + file: test_ab, base: self.testpaths.base.clone(), - relative_dir: Path::new(rel_ab).parent() - .map(|p| p.to_path_buf()) - .unwrap_or_else(|| PathBuf::new()) + relative_dir: self.testpaths.relative_dir + .join("aux") + .join(rel_ab) + .parent() + .expect("aux-build path has no parent") + .to_path_buf() } }