Auto merge of #24312 - rprichard:destabilize-format-args, r=alexcrichton
Fixes #22953.
This commit is contained in:
commit
dabf0c6371
|
@ -38,7 +38,8 @@ mod num;
|
||||||
mod float;
|
mod float;
|
||||||
mod builders;
|
mod builders;
|
||||||
|
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
|
#[cfg_attr(not(stage0), unstable(feature = "core", reason = "internal to format_args!"))]
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
pub mod rt {
|
pub mod rt {
|
||||||
pub mod v1;
|
pub mod v1;
|
||||||
|
@ -134,7 +135,8 @@ enum Void {}
|
||||||
/// compile time it is ensured that the function and the value have the correct
|
/// compile time it is ensured that the function and the value have the correct
|
||||||
/// types, and then this struct is used to canonicalize arguments to one type.
|
/// types, and then this struct is used to canonicalize arguments to one type.
|
||||||
#[derive(Copy)]
|
#[derive(Copy)]
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
|
#[cfg_attr(not(stage0), unstable(feature = "core", reason = "internal to format_args!"))]
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
pub struct ArgumentV1<'a> {
|
pub struct ArgumentV1<'a> {
|
||||||
value: &'a Void,
|
value: &'a Void,
|
||||||
|
@ -154,7 +156,8 @@ impl<'a> ArgumentV1<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
|
#[cfg_attr(not(stage0), unstable(feature = "core", reason = "internal to format_args!"))]
|
||||||
pub fn new<'b, T>(x: &'b T,
|
pub fn new<'b, T>(x: &'b T,
|
||||||
f: fn(&T, &mut Formatter) -> Result) -> ArgumentV1<'b> {
|
f: fn(&T, &mut Formatter) -> Result) -> ArgumentV1<'b> {
|
||||||
unsafe {
|
unsafe {
|
||||||
|
@ -166,7 +169,8 @@ impl<'a> ArgumentV1<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
|
#[cfg_attr(not(stage0), unstable(feature = "core", reason = "internal to format_args!"))]
|
||||||
pub fn from_usize(x: &usize) -> ArgumentV1 {
|
pub fn from_usize(x: &usize) -> ArgumentV1 {
|
||||||
ArgumentV1::new(x, ArgumentV1::show_usize)
|
ArgumentV1::new(x, ArgumentV1::show_usize)
|
||||||
}
|
}
|
||||||
|
@ -189,7 +193,8 @@ impl<'a> Arguments<'a> {
|
||||||
/// When using the format_args!() macro, this function is used to generate the
|
/// When using the format_args!() macro, this function is used to generate the
|
||||||
/// Arguments structure.
|
/// Arguments structure.
|
||||||
#[doc(hidden)] #[inline]
|
#[doc(hidden)] #[inline]
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
|
#[cfg_attr(not(stage0), unstable(feature = "core", reason = "internal to format_args!"))]
|
||||||
pub fn new_v1(pieces: &'a [&'a str],
|
pub fn new_v1(pieces: &'a [&'a str],
|
||||||
args: &'a [ArgumentV1<'a>]) -> Arguments<'a> {
|
args: &'a [ArgumentV1<'a>]) -> Arguments<'a> {
|
||||||
Arguments {
|
Arguments {
|
||||||
|
@ -206,7 +211,8 @@ impl<'a> Arguments<'a> {
|
||||||
/// created with `argumentusize`. However, failing to do so doesn't cause
|
/// created with `argumentusize`. However, failing to do so doesn't cause
|
||||||
/// unsafety, but will ignore invalid .
|
/// unsafety, but will ignore invalid .
|
||||||
#[doc(hidden)] #[inline]
|
#[doc(hidden)] #[inline]
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
|
#[cfg_attr(not(stage0), unstable(feature = "core", reason = "internal to format_args!"))]
|
||||||
pub fn new_v1_formatted(pieces: &'a [&'a str],
|
pub fn new_v1_formatted(pieces: &'a [&'a str],
|
||||||
args: &'a [ArgumentV1<'a>],
|
args: &'a [ArgumentV1<'a>],
|
||||||
fmt: &'a [rt::v1::Argument]) -> Arguments<'a> {
|
fmt: &'a [rt::v1::Argument]) -> Arguments<'a> {
|
||||||
|
|
|
@ -14,68 +14,69 @@
|
||||||
//! These definitions are similar to their `ct` equivalents, but differ in that
|
//! These definitions are similar to their `ct` equivalents, but differ in that
|
||||||
//! these can be statically allocated and are slightly optimized for the runtime
|
//! these can be statically allocated and are slightly optimized for the runtime
|
||||||
|
|
||||||
#![stable(feature = "rust1", since = "1.0.0")]
|
#![cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
|
#![cfg_attr(not(stage0), unstable(feature = "core", reason = "internal to format_args!"))]
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
pub struct Argument {
|
pub struct Argument {
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
pub position: Position,
|
pub position: Position,
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
pub format: FormatSpec,
|
pub format: FormatSpec,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
pub struct FormatSpec {
|
pub struct FormatSpec {
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
pub fill: char,
|
pub fill: char,
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
pub align: Alignment,
|
pub align: Alignment,
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
pub flags: u32,
|
pub flags: u32,
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
pub precision: Count,
|
pub precision: Count,
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
pub width: Count,
|
pub width: Count,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Possible alignments that can be requested as part of a formatting directive.
|
/// Possible alignments that can be requested as part of a formatting directive.
|
||||||
#[derive(Copy, Clone, PartialEq)]
|
#[derive(Copy, Clone, PartialEq)]
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
pub enum Alignment {
|
pub enum Alignment {
|
||||||
/// Indication that contents should be left-aligned.
|
/// Indication that contents should be left-aligned.
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
Left,
|
Left,
|
||||||
/// Indication that contents should be right-aligned.
|
/// Indication that contents should be right-aligned.
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
Right,
|
Right,
|
||||||
/// Indication that contents should be center-aligned.
|
/// Indication that contents should be center-aligned.
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
Center,
|
Center,
|
||||||
/// No alignment was requested.
|
/// No alignment was requested.
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
Unknown,
|
Unknown,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
pub enum Count {
|
pub enum Count {
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
Is(usize),
|
Is(usize),
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
Param(usize),
|
Param(usize),
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
NextParam,
|
NextParam,
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
Implied,
|
Implied,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
pub enum Position {
|
pub enum Position {
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
Next,
|
Next,
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[cfg_attr(stage0, stable(feature = "rust1", since = "1.0.0"))]
|
||||||
At(usize)
|
At(usize)
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,10 @@ enum Position {
|
||||||
|
|
||||||
struct Context<'a, 'b:'a> {
|
struct Context<'a, 'b:'a> {
|
||||||
ecx: &'a mut ExtCtxt<'b>,
|
ecx: &'a mut ExtCtxt<'b>,
|
||||||
|
/// The macro's call site. References to unstable formatting internals must
|
||||||
|
/// use this span to pass the stability checker.
|
||||||
|
macsp: Span,
|
||||||
|
/// The span of the format string literal.
|
||||||
fmtsp: Span,
|
fmtsp: Span,
|
||||||
|
|
||||||
/// Parsed argument expressions and the types that we've found so far for
|
/// Parsed argument expressions and the types that we've found so far for
|
||||||
|
@ -308,7 +312,7 @@ impl<'a, 'b> Context<'a, 'b> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn trans_count(&self, c: parse::Count) -> P<ast::Expr> {
|
fn trans_count(&self, c: parse::Count) -> P<ast::Expr> {
|
||||||
let sp = self.fmtsp;
|
let sp = self.macsp;
|
||||||
let count = |c, arg| {
|
let count = |c, arg| {
|
||||||
let mut path = Context::rtpath(self.ecx, "Count");
|
let mut path = Context::rtpath(self.ecx, "Count");
|
||||||
path.push(self.ecx.ident_of(c));
|
path.push(self.ecx.ident_of(c));
|
||||||
|
@ -346,7 +350,7 @@ impl<'a, 'b> Context<'a, 'b> {
|
||||||
/// Translate a `parse::Piece` to a static `rt::Argument` or append
|
/// Translate a `parse::Piece` to a static `rt::Argument` or append
|
||||||
/// to the `literal` string.
|
/// to the `literal` string.
|
||||||
fn trans_piece(&mut self, piece: &parse::Piece) -> Option<P<ast::Expr>> {
|
fn trans_piece(&mut self, piece: &parse::Piece) -> Option<P<ast::Expr>> {
|
||||||
let sp = self.fmtsp;
|
let sp = self.macsp;
|
||||||
match *piece {
|
match *piece {
|
||||||
parse::String(s) => {
|
parse::String(s) => {
|
||||||
self.literal.push_str(s);
|
self.literal.push_str(s);
|
||||||
|
@ -442,22 +446,22 @@ impl<'a, 'b> Context<'a, 'b> {
|
||||||
piece_ty: P<ast::Ty>,
|
piece_ty: P<ast::Ty>,
|
||||||
pieces: Vec<P<ast::Expr>>)
|
pieces: Vec<P<ast::Expr>>)
|
||||||
-> P<ast::Expr> {
|
-> P<ast::Expr> {
|
||||||
let fmtsp = piece_ty.span;
|
let sp = piece_ty.span;
|
||||||
let ty = ecx.ty_rptr(fmtsp,
|
let ty = ecx.ty_rptr(sp,
|
||||||
ecx.ty(fmtsp, ast::TyVec(piece_ty)),
|
ecx.ty(sp, ast::TyVec(piece_ty)),
|
||||||
Some(ecx.lifetime(fmtsp, special_idents::static_lifetime.name)),
|
Some(ecx.lifetime(sp, special_idents::static_lifetime.name)),
|
||||||
ast::MutImmutable);
|
ast::MutImmutable);
|
||||||
let slice = ecx.expr_vec_slice(fmtsp, pieces);
|
let slice = ecx.expr_vec_slice(sp, pieces);
|
||||||
let st = ast::ItemStatic(ty, ast::MutImmutable, slice);
|
let st = ast::ItemStatic(ty, ast::MutImmutable, slice);
|
||||||
|
|
||||||
let name = ecx.ident_of(name);
|
let name = ecx.ident_of(name);
|
||||||
let item = ecx.item(fmtsp, name, vec![], st);
|
let item = ecx.item(sp, name, vec![], st);
|
||||||
let decl = respan(fmtsp, ast::DeclItem(item));
|
let decl = respan(sp, ast::DeclItem(item));
|
||||||
|
|
||||||
// Wrap the declaration in a block so that it forms a single expression.
|
// Wrap the declaration in a block so that it forms a single expression.
|
||||||
ecx.expr_block(ecx.block(fmtsp,
|
ecx.expr_block(ecx.block(sp,
|
||||||
vec![P(respan(fmtsp, ast::StmtDecl(P(decl), ast::DUMMY_NODE_ID)))],
|
vec![P(respan(sp, ast::StmtDecl(P(decl), ast::DUMMY_NODE_ID)))],
|
||||||
Some(ecx.expr_ident(fmtsp, name))))
|
Some(ecx.expr_ident(sp, name))))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Actually builds the expression which the iformat! block will be expanded
|
/// Actually builds the expression which the iformat! block will be expanded
|
||||||
|
@ -497,7 +501,7 @@ impl<'a, 'b> Context<'a, 'b> {
|
||||||
|
|
||||||
let name = self.ecx.ident_of(&format!("__arg{}", i));
|
let name = self.ecx.ident_of(&format!("__arg{}", i));
|
||||||
pats.push(self.ecx.pat_ident(e.span, name));
|
pats.push(self.ecx.pat_ident(e.span, name));
|
||||||
locals.push(Context::format_arg(self.ecx, e.span, arg_ty,
|
locals.push(Context::format_arg(self.ecx, self.macsp, e.span, arg_ty,
|
||||||
self.ecx.expr_ident(e.span, name)));
|
self.ecx.expr_ident(e.span, name)));
|
||||||
heads.push(self.ecx.expr_addr_of(e.span, e));
|
heads.push(self.ecx.expr_addr_of(e.span, e));
|
||||||
}
|
}
|
||||||
|
@ -515,7 +519,7 @@ impl<'a, 'b> Context<'a, 'b> {
|
||||||
*name));
|
*name));
|
||||||
pats.push(self.ecx.pat_ident(e.span, lname));
|
pats.push(self.ecx.pat_ident(e.span, lname));
|
||||||
names[*self.name_positions.get(name).unwrap()] =
|
names[*self.name_positions.get(name).unwrap()] =
|
||||||
Some(Context::format_arg(self.ecx, e.span, arg_ty,
|
Some(Context::format_arg(self.ecx, self.macsp, e.span, arg_ty,
|
||||||
self.ecx.expr_ident(e.span, lname)));
|
self.ecx.expr_ident(e.span, lname)));
|
||||||
heads.push(self.ecx.expr_addr_of(e.span, e));
|
heads.push(self.ecx.expr_addr_of(e.span, e));
|
||||||
}
|
}
|
||||||
|
@ -566,7 +570,7 @@ impl<'a, 'b> Context<'a, 'b> {
|
||||||
// Build up the static array which will store our precompiled
|
// Build up the static array which will store our precompiled
|
||||||
// nonstandard placeholders, if there are any.
|
// nonstandard placeholders, if there are any.
|
||||||
let piece_ty = self.ecx.ty_path(self.ecx.path_global(
|
let piece_ty = self.ecx.ty_path(self.ecx.path_global(
|
||||||
self.fmtsp,
|
self.macsp,
|
||||||
Context::rtpath(self.ecx, "Argument")));
|
Context::rtpath(self.ecx, "Argument")));
|
||||||
let fmt = Context::static_array(self.ecx,
|
let fmt = Context::static_array(self.ecx,
|
||||||
"__STATIC_FMTARGS",
|
"__STATIC_FMTARGS",
|
||||||
|
@ -576,14 +580,14 @@ impl<'a, 'b> Context<'a, 'b> {
|
||||||
("new_v1_formatted", vec![pieces, args_slice, fmt])
|
("new_v1_formatted", vec![pieces, args_slice, fmt])
|
||||||
};
|
};
|
||||||
|
|
||||||
self.ecx.expr_call_global(self.fmtsp, vec!(
|
self.ecx.expr_call_global(self.macsp, vec!(
|
||||||
self.ecx.ident_of_std("core"),
|
self.ecx.ident_of_std("core"),
|
||||||
self.ecx.ident_of("fmt"),
|
self.ecx.ident_of("fmt"),
|
||||||
self.ecx.ident_of("Arguments"),
|
self.ecx.ident_of("Arguments"),
|
||||||
self.ecx.ident_of(fn_name)), fn_args)
|
self.ecx.ident_of(fn_name)), fn_args)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn format_arg(ecx: &ExtCtxt, sp: Span,
|
fn format_arg(ecx: &ExtCtxt, macsp: Span, sp: Span,
|
||||||
ty: &ArgumentType, arg: P<ast::Expr>)
|
ty: &ArgumentType, arg: P<ast::Expr>)
|
||||||
-> P<ast::Expr> {
|
-> P<ast::Expr> {
|
||||||
let trait_ = match *ty {
|
let trait_ = match *ty {
|
||||||
|
@ -607,7 +611,7 @@ impl<'a, 'b> Context<'a, 'b> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Unsigned => {
|
Unsigned => {
|
||||||
return ecx.expr_call_global(sp, vec![
|
return ecx.expr_call_global(macsp, vec![
|
||||||
ecx.ident_of_std("core"),
|
ecx.ident_of_std("core"),
|
||||||
ecx.ident_of("fmt"),
|
ecx.ident_of("fmt"),
|
||||||
ecx.ident_of("ArgumentV1"),
|
ecx.ident_of("ArgumentV1"),
|
||||||
|
@ -620,7 +624,7 @@ impl<'a, 'b> Context<'a, 'b> {
|
||||||
ecx.ident_of("fmt"),
|
ecx.ident_of("fmt"),
|
||||||
ecx.ident_of(trait_),
|
ecx.ident_of(trait_),
|
||||||
ecx.ident_of("fmt")]);
|
ecx.ident_of("fmt")]);
|
||||||
ecx.expr_call_global(sp, vec![
|
ecx.expr_call_global(macsp, vec![
|
||||||
ecx.ident_of_std("core"),
|
ecx.ident_of_std("core"),
|
||||||
ecx.ident_of("fmt"),
|
ecx.ident_of("fmt"),
|
||||||
ecx.ident_of("ArgumentV1"),
|
ecx.ident_of("ArgumentV1"),
|
||||||
|
@ -650,6 +654,7 @@ pub fn expand_preparsed_format_args(ecx: &mut ExtCtxt, sp: Span,
|
||||||
names: HashMap<String, P<ast::Expr>>)
|
names: HashMap<String, P<ast::Expr>>)
|
||||||
-> P<ast::Expr> {
|
-> P<ast::Expr> {
|
||||||
let arg_types: Vec<_> = (0..args.len()).map(|_| None).collect();
|
let arg_types: Vec<_> = (0..args.len()).map(|_| None).collect();
|
||||||
|
let macsp = ecx.call_site();
|
||||||
// Expand the format literal so that efmt.span will have a backtrace. This
|
// Expand the format literal so that efmt.span will have a backtrace. This
|
||||||
// is essential for locating a bug when the format literal is generated in
|
// is essential for locating a bug when the format literal is generated in
|
||||||
// a macro. (e.g. println!("{}"), which uses concat!($fmt, "\n")).
|
// a macro. (e.g. println!("{}"), which uses concat!($fmt, "\n")).
|
||||||
|
@ -668,6 +673,7 @@ pub fn expand_preparsed_format_args(ecx: &mut ExtCtxt, sp: Span,
|
||||||
pieces: Vec::new(),
|
pieces: Vec::new(),
|
||||||
str_pieces: Vec::new(),
|
str_pieces: Vec::new(),
|
||||||
all_pieces_simple: true,
|
all_pieces_simple: true,
|
||||||
|
macsp: macsp,
|
||||||
fmtsp: efmt.span,
|
fmtsp: efmt.span,
|
||||||
};
|
};
|
||||||
let fmt = match expr_to_string(cx.ecx,
|
let fmt = match expr_to_string(cx.ecx,
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
|
|
||||||
// pretty-expanded FIXME #23616
|
|
||||||
|
|
||||||
#![feature(libc, std_misc)]
|
#![feature(libc, std_misc)]
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
// exec-env:RUST_LOG=info
|
// exec-env:RUST_LOG=info
|
||||||
|
|
||||||
// pretty-expanded FIXME #23616
|
|
||||||
|
|
||||||
#![allow(unknown_features)]
|
#![allow(unknown_features)]
|
||||||
#![feature(box_syntax, old_io, rustc_private, std_misc)]
|
#![feature(box_syntax, old_io, rustc_private, std_misc)]
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// pretty-expanded FIXME #23616
|
|
||||||
|
|
||||||
#![allow(unknown_features)]
|
#![allow(unknown_features)]
|
||||||
#![feature(box_syntax, std_misc)]
|
#![feature(box_syntax, std_misc)]
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// pretty-expanded FIXME #23616
|
|
||||||
|
|
||||||
#![feature(std_misc)]
|
#![feature(std_misc)]
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// pretty-expanded FIXME #23616
|
|
||||||
|
|
||||||
#![feature(std_misc)]
|
#![feature(std_misc)]
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
|
|
||||||
// pretty-expanded FIXME #23616
|
|
||||||
|
|
||||||
#![feature(std_misc, libc)]
|
#![feature(std_misc, libc)]
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// pretty-expanded FIXME #23616
|
|
||||||
|
|
||||||
#![feature(rustc_private, old_io)]
|
#![feature(rustc_private, old_io)]
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
// UFCS-style calls to a method in `Trait` where `Self` was bound to a
|
// UFCS-style calls to a method in `Trait` where `Self` was bound to a
|
||||||
// trait object of type `Trait`. See also `ufcs-trait-object.rs`.
|
// trait object of type `Trait`. See also `ufcs-trait-object.rs`.
|
||||||
|
|
||||||
// pretty-expanded FIXME #23616
|
|
||||||
|
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
// for completeness since .rs files linked from .rc files support this
|
// for completeness since .rs files linked from .rc files support this
|
||||||
// notation to specify their module's attributes
|
// notation to specify their module's attributes
|
||||||
|
|
||||||
// pretty-expanded FIXME #23616
|
|
||||||
|
|
||||||
#![feature(custom_attribute, libc)]
|
#![feature(custom_attribute, libc)]
|
||||||
#![allow(unused_attribute)]
|
#![allow(unused_attribute)]
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
// exec-env:RUST_LOG=rust_log_filter/foo
|
// exec-env:RUST_LOG=rust_log_filter/foo
|
||||||
|
|
||||||
// pretty-expanded FIXME #23616
|
|
||||||
|
|
||||||
#![allow(unknown_features)]
|
#![allow(unknown_features)]
|
||||||
#![feature(box_syntax, std_misc, rustc_private)]
|
#![feature(box_syntax, std_misc, rustc_private)]
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// pretty-expanded FIXME #23616
|
|
||||||
|
|
||||||
#![feature(std_misc)]
|
#![feature(std_misc)]
|
||||||
#![allow(dead_assignment)]
|
#![allow(dead_assignment)]
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// pretty-expanded FIXME #23616
|
|
||||||
|
|
||||||
#![allow(unknown_features)]
|
#![allow(unknown_features)]
|
||||||
#![feature(box_syntax, std_misc)]
|
#![feature(box_syntax, std_misc)]
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// pretty-expanded FIXME #23616
|
|
||||||
|
|
||||||
#![feature(libc, std_misc)]
|
#![feature(libc, std_misc)]
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue