提交 a0411e2b 编写于 作者: B bors

Auto merge of #97910 - JohnTitor:rollup-gu3k0xl, r=JohnTitor

Rollup of 5 pull requests

Successful merges:

 - #95632 (impl Read and Write for VecDeque<u8>)
 - #95860 (Stabilize `$$` in Rust 1.63.0)
 - #97838 (hexagon: adapt test for upstream output changes)
 - #97843 (Relax mipsel-sony-psp's linker script)
 - #97874 (rewrite combine doc comment)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
...@@ -234,8 +234,6 @@ fn parse_tree( ...@@ -234,8 +234,6 @@ fn parse_tree(
sess, sess,
&Token { kind: token::Dollar, span }, &Token { kind: token::Dollar, span },
); );
} else {
maybe_emit_macro_metavar_expr_feature(features, sess, span);
} }
TokenTree::token(token::Dollar, span) TokenTree::token(token::Dollar, span)
} }
......
/////////////////////////////////////////////////////////////////////////// //! There are four type combiners: [Equate], [Sub], [Lub], and [Glb].
// # Type combining //! Each implements the trait [TypeRelation] and contains methods for
// //! combining two instances of various things and yielding a new instance.
// There are four type combiners: equate, sub, lub, and glb. Each //! These combiner methods always yield a `Result<T>`. To relate two
// implements the trait `Combine` and contains methods for combining //! types, you can use `infcx.at(cause, param_env)` which then allows
// two instances of various things and yielding a new instance. These //! you to use the relevant methods of [At](super::at::At).
// combiner methods always yield a `Result<T>`. There is a lot of //!
// common code for these operations, implemented as default methods on //! Combiners mostly do their specific behavior and then hand off the
// the `Combine` trait. //! bulk of the work to [InferCtxt::super_combine_tys] and
// //! [InferCtxt::super_combine_consts].
// Each operation may have side-effects on the inference context, //!
// though these can be unrolled using snapshots. On success, the //! Combining two types may have side-effects on the inference contexts
// LUB/GLB operations return the appropriate bound. The Eq and Sub //! which can be undone by using snapshots. You probably want to use
// operations generally return the first operand. //! either [InferCtxt::commit_if_ok] or [InferCtxt::probe].
// //!
// ## Contravariance //! On success, the LUB/GLB operations return the appropriate bound. The
// //! return value of `Equate` or `Sub` shouldn't really be used.
// When you are relating two things which have a contravariant //!
// relationship, you should use `contratys()` or `contraregions()`, //! ## Contravariance
// rather than inversing the order of arguments! This is necessary //!
// because the order of arguments is not relevant for LUB and GLB. It //! We explicitly track which argument is expected using
// is also useful to track which value is the "expected" value in //! [TypeRelation::a_is_expected], so when dealing with contravariance
// terms of error reporting. //! this should be correctly updated.
use super::equate::Equate; use super::equate::Equate;
use super::glb::Glb; use super::glb::Glb;
......
...@@ -6,7 +6,8 @@ ...@@ -6,7 +6,8 @@
pub fn target() -> Target { pub fn target() -> Target {
let mut pre_link_args = LinkArgs::new(); let mut pre_link_args = LinkArgs::new();
pre_link_args.insert(LinkerFlavor::Lld(LldFlavor::Ld), vec!["--emit-relocs".into()]); pre_link_args
.insert(LinkerFlavor::Lld(LldFlavor::Ld), vec!["--emit-relocs".into(), "--nmagic".into()]);
Target { Target {
llvm_target: "mipsel-sony-psp".into(), llvm_target: "mipsel-sony-psp".into(),
......
...@@ -7,14 +7,18 @@ SECTIONS ...@@ -7,14 +7,18 @@ SECTIONS
/* Sort stubs for convenient ordering */ /* Sort stubs for convenient ordering */
.sceStub.text : { *(.sceStub.text) *(SORT(.sceStub.text.*)) } .sceStub.text : { *(.sceStub.text) *(SORT(.sceStub.text.*)) }
/* PSP import library stub sections. Bundles together `.lib.stub.entry.*`
* sections for better `--gc-sections` support. */
.lib.stub.top : { *(.lib.stub.top) }
.lib.stub : { *(.lib.stub) *(.lib.stub.entry.*) }
.lib.stub.btm : { *(.lib.stub.btm) }
/* Keep these sections around, even though they may appear unused to the linker */ /* Keep these sections around, even though they may appear unused to the linker */
.lib.ent.top : { KEEP(*(.lib.ent.top)) } .lib.ent.top : { KEEP(*(.lib.ent.top)) }
.lib.ent : { KEEP(*(.lib.ent)) } .lib.ent : { KEEP(*(.lib.ent)) }
.lib.ent.btm : { KEEP(*(.lib.ent.btm)) } .lib.ent.btm : { KEEP(*(.lib.ent.btm)) }
.lib.stub.top : { KEEP(*(.lib.stub.top)) }
.lib.stub : { KEEP(*(.lib.stub)) } .eh_frame_hdr : { *(.eh_frame_hdr) }
.lib.stub.btm : { KEEP(*(.lib.stub.btm)) }
.eh_frame_hdr : { KEEP(*(.eh_frame_hdr)) }
/* Add symbols for LLVM's libunwind */ /* Add symbols for LLVM's libunwind */
__eh_frame_hdr_start = SIZEOF(.eh_frame_hdr) > 0 ? ADDR(.eh_frame_hdr) : 0; __eh_frame_hdr_start = SIZEOF(.eh_frame_hdr) > 0 ? ADDR(.eh_frame_hdr) : 0;
...@@ -27,8 +31,15 @@ SECTIONS ...@@ -27,8 +31,15 @@ SECTIONS
} }
/* These are explicitly listed to avoid being merged into .rodata */ /* These are explicitly listed to avoid being merged into .rodata */
.rodata.sceResident : { *(.rodata.sceResident) } .rodata.sceResident : { *(.rodata.sceResident) *(.rodata.sceResident.*) }
.rodata.sceModuleInfo : { *(.rodata.sceModuleInfo) } .rodata.sceModuleInfo : { *(.rodata.sceModuleInfo) }
/* Sort NIDs for convenient ordering */ /* Sort NIDs for convenient ordering */
.rodata.sceNid : { *(.rodata.sceNid) *(SORT(.rodata.sceNid.*)) } .rodata.sceNid : { *(.rodata.sceNid) *(SORT(.rodata.sceNid.*)) }
.rodata : { *(.rodata .rodata.*) }
.data : { *(.data .data.*) }
.gcc_except_table : { *(.gcc_except_table .gcc_except_table.*) }
.bss : { *(.bss .bss.*) }
/DISCARD/ : { *(.rel.sceStub.text .MIPS.abiflags .reginfo) }
} }
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
use crate::alloc::Allocator; use crate::alloc::Allocator;
use crate::cmp; use crate::cmp;
use crate::collections::VecDeque;
use crate::fmt; use crate::fmt;
use crate::io::{ use crate::io::{
self, BufRead, ErrorKind, IoSlice, IoSliceMut, Read, ReadBuf, Seek, SeekFrom, Write, self, BufRead, ErrorKind, IoSlice, IoSliceMut, Read, ReadBuf, Seek, SeekFrom, Write,
...@@ -410,3 +411,50 @@ fn flush(&mut self) -> io::Result<()> { ...@@ -410,3 +411,50 @@ fn flush(&mut self) -> io::Result<()> {
Ok(()) Ok(())
} }
} }
/// Read is implemented for `VecDeque<u8>` by consuming bytes from the front of the `VecDeque`.
#[stable(feature = "vecdeque_read_write", since = "1.63.0")]
impl<A: Allocator> Read for VecDeque<u8, A> {
/// Fill `buf` with the contents of the "front" slice as returned by
/// [`as_slices`][`VecDeque::as_slices`]. If the contained byte slices of the `VecDeque` are
/// discontiguous, multiple calls to `read` will be needed to read the entire content.
#[inline]
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
let (ref mut front, _) = self.as_slices();
let n = Read::read(front, buf)?;
self.drain(..n);
Ok(n)
}
#[inline]
fn read_buf(&mut self, buf: &mut ReadBuf<'_>) -> io::Result<()> {
let (ref mut front, _) = self.as_slices();
let n = cmp::min(buf.remaining(), front.len());
Read::read_buf(front, buf)?;
self.drain(..n);
Ok(())
}
}
/// Write is implemented for `VecDeque<u8>` by appending to the `VecDeque`, growing it as needed.
#[stable(feature = "vecdeque_read_write", since = "1.63.0")]
impl<A: Allocator> Write for VecDeque<u8, A> {
#[inline]
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
self.reserve(buf.len());
self.extend(buf);
Ok(buf.len())
}
#[inline]
fn write_all(&mut self, buf: &[u8]) -> io::Result<()> {
self.reserve(buf.len());
self.extend(buf);
Ok(())
}
#[inline]
fn flush(&mut self) -> io::Result<()> {
Ok(())
}
}
...@@ -73,7 +73,7 @@ pub unsafe fn $func(x: $ty) -> $ty { ...@@ -73,7 +73,7 @@ pub unsafe fn $func(x: $ty) -> $ty {
// CHECK-LABEL: sym_static: // CHECK-LABEL: sym_static:
// CHECK: InlineAsm Start // CHECK: InlineAsm Start
// CHECK: r0 = #extern_static // CHECK: r0 = {{#+}}extern_static
// CHECK: InlineAsm End // CHECK: InlineAsm End
#[no_mangle] #[no_mangle]
pub unsafe fn sym_static() { pub unsafe fn sym_static() {
...@@ -88,7 +88,7 @@ pub unsafe fn sym_static() { ...@@ -88,7 +88,7 @@ pub unsafe fn sym_static() {
// CHECK-LABEL: sym_fn: // CHECK-LABEL: sym_fn:
// CHECK: InlineAsm Start // CHECK: InlineAsm Start
// CHECK: r0 = #extern_func // CHECK: r0 = {{#+}}extern_func
// CHECK: InlineAsm End // CHECK: InlineAsm End
#[no_mangle] #[no_mangle]
pub unsafe fn sym_fn() { pub unsafe fn sym_fn() {
...@@ -108,7 +108,7 @@ pub unsafe fn sym_fn() { ...@@ -108,7 +108,7 @@ pub unsafe fn sym_fn() {
// CHECK: InlineAsm Start // CHECK: InlineAsm Start
// CHECK: { // CHECK: {
// CHECK: r{{[0-9]+}} = r0 // CHECK: r{{[0-9]+}} = r0
// CHECK: memw(r1) = r{{[0-9]+}} // CHECK: memw(r1{{(\+#0)?}}) = r{{[0-9]+}}
// CHECK: } // CHECK: }
// CHECK: InlineAsm End // CHECK: InlineAsm End
#[no_mangle] #[no_mangle]
......
// check-pass
macro_rules! dollar_dollar {
() => {
macro_rules! bar {
( $$( $$any:tt )* ) => { $$( $$any )* };
}
};
}
fn main() {
}
...@@ -5,18 +5,6 @@ ...@@ -5,18 +5,6 @@
}; };
} }
macro_rules! dollar_dollar {
() => {
macro_rules! bar {
( $$( $$any:tt )* ) => { $$( $$any )* };
//~^ ERROR meta-variable expressions are unstable
//~| ERROR meta-variable expressions are unstable
//~| ERROR meta-variable expressions are unstable
//~| ERROR meta-variable expressions are unstable
}
};
}
macro_rules! index { macro_rules! index {
( $( $e:stmt ),* ) => { ( $( $e:stmt ),* ) => {
$( ${ignore(e)} ${index()} )* $( ${ignore(e)} ${index()} )*
......
error[E0658]: meta-variable expressions are unstable error[E0658]: meta-variable expressions are unstable
--> $DIR/required-feature.rs:3:10 --> $DIR/required-features.rs:3:10
| |
LL | ${ count(e) } LL | ${ count(e) }
| ^^^^^^^^^^^^ | ^^^^^^^^^^^^
...@@ -8,43 +8,7 @@ LL | ${ count(e) } ...@@ -8,43 +8,7 @@ LL | ${ count(e) }
= help: add `#![feature(macro_metavar_expr)]` to the crate attributes to enable = help: add `#![feature(macro_metavar_expr)]` to the crate attributes to enable
error[E0658]: meta-variable expressions are unstable error[E0658]: meta-variable expressions are unstable
--> $DIR/required-feature.rs:11:16 --> $DIR/required-features.rs:10:13
|
LL | ( $$( $$any:tt )* ) => { $$( $$any )* };
| ^
|
= note: see issue #83527 <https://github.com/rust-lang/rust/issues/83527> for more information
= help: add `#![feature(macro_metavar_expr)]` to the crate attributes to enable
error[E0658]: meta-variable expressions are unstable
--> $DIR/required-feature.rs:11:20
|
LL | ( $$( $$any:tt )* ) => { $$( $$any )* };
| ^
|
= note: see issue #83527 <https://github.com/rust-lang/rust/issues/83527> for more information
= help: add `#![feature(macro_metavar_expr)]` to the crate attributes to enable
error[E0658]: meta-variable expressions are unstable
--> $DIR/required-feature.rs:11:39
|
LL | ( $$( $$any:tt )* ) => { $$( $$any )* };
| ^
|
= note: see issue #83527 <https://github.com/rust-lang/rust/issues/83527> for more information
= help: add `#![feature(macro_metavar_expr)]` to the crate attributes to enable
error[E0658]: meta-variable expressions are unstable
--> $DIR/required-feature.rs:11:43
|
LL | ( $$( $$any:tt )* ) => { $$( $$any )* };
| ^
|
= note: see issue #83527 <https://github.com/rust-lang/rust/issues/83527> for more information
= help: add `#![feature(macro_metavar_expr)]` to the crate attributes to enable
error[E0658]: meta-variable expressions are unstable
--> $DIR/required-feature.rs:22:13
| |
LL | $( ${ignore(e)} ${index()} )* LL | $( ${ignore(e)} ${index()} )*
| ^^^^^^^^^^^ | ^^^^^^^^^^^
...@@ -53,7 +17,7 @@ LL | $( ${ignore(e)} ${index()} )* ...@@ -53,7 +17,7 @@ LL | $( ${ignore(e)} ${index()} )*
= help: add `#![feature(macro_metavar_expr)]` to the crate attributes to enable = help: add `#![feature(macro_metavar_expr)]` to the crate attributes to enable
error[E0658]: meta-variable expressions are unstable error[E0658]: meta-variable expressions are unstable
--> $DIR/required-feature.rs:22:26 --> $DIR/required-features.rs:10:26
| |
LL | $( ${ignore(e)} ${index()} )* LL | $( ${ignore(e)} ${index()} )*
| ^^^^^^^^^ | ^^^^^^^^^
...@@ -62,7 +26,7 @@ LL | $( ${ignore(e)} ${index()} )* ...@@ -62,7 +26,7 @@ LL | $( ${ignore(e)} ${index()} )*
= help: add `#![feature(macro_metavar_expr)]` to the crate attributes to enable = help: add `#![feature(macro_metavar_expr)]` to the crate attributes to enable
error[E0658]: meta-variable expressions are unstable error[E0658]: meta-variable expressions are unstable
--> $DIR/required-feature.rs:30:19 --> $DIR/required-features.rs:18:19
| |
LL | 0 $( + 1 ${ignore(i)} )* LL | 0 $( + 1 ${ignore(i)} )*
| ^^^^^^^^^^^ | ^^^^^^^^^^^
...@@ -71,7 +35,7 @@ LL | 0 $( + 1 ${ignore(i)} )* ...@@ -71,7 +35,7 @@ LL | 0 $( + 1 ${ignore(i)} )*
= help: add `#![feature(macro_metavar_expr)]` to the crate attributes to enable = help: add `#![feature(macro_metavar_expr)]` to the crate attributes to enable
error[E0658]: meta-variable expressions are unstable error[E0658]: meta-variable expressions are unstable
--> $DIR/required-feature.rs:37:13 --> $DIR/required-features.rs:25:13
| |
LL | $( ${ignore(e)} ${length()} )* LL | $( ${ignore(e)} ${length()} )*
| ^^^^^^^^^^^ | ^^^^^^^^^^^
...@@ -80,7 +44,7 @@ LL | $( ${ignore(e)} ${length()} )* ...@@ -80,7 +44,7 @@ LL | $( ${ignore(e)} ${length()} )*
= help: add `#![feature(macro_metavar_expr)]` to the crate attributes to enable = help: add `#![feature(macro_metavar_expr)]` to the crate attributes to enable
error[E0658]: meta-variable expressions are unstable error[E0658]: meta-variable expressions are unstable
--> $DIR/required-feature.rs:37:26 --> $DIR/required-features.rs:25:26
| |
LL | $( ${ignore(e)} ${length()} )* LL | $( ${ignore(e)} ${length()} )*
| ^^^^^^^^^^ | ^^^^^^^^^^
...@@ -88,6 +52,6 @@ LL | $( ${ignore(e)} ${length()} )* ...@@ -88,6 +52,6 @@ LL | $( ${ignore(e)} ${length()} )*
= note: see issue #83527 <https://github.com/rust-lang/rust/issues/83527> for more information = note: see issue #83527 <https://github.com/rust-lang/rust/issues/83527> for more information
= help: add `#![feature(macro_metavar_expr)]` to the crate attributes to enable = help: add `#![feature(macro_metavar_expr)]` to the crate attributes to enable
error: aborting due to 10 previous errors error: aborting due to 6 previous errors
For more information about this error, try `rustc --explain E0658`. For more information about this error, try `rustc --explain E0658`.
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册