Auto merge of #80905 - JohnTitor:rollup-tmmwmnb, r=JohnTitor
Rollup of 6 pull requests Successful merges: - #80809 (Use standard formatting for "rust-call" ABI message) - #80872 (Fix typo in source-based-code-coverage.md) - #80878 (Add ABI argument to `find_mir_or_eval_fn`) - #80881 ( Fix intra-doc links to `Self` and `crate` ) - #80887 (log-color: Detect TTY based on stderr, not stdout) - #80892 (rustdoc: Remove `*` intra-doc alias for `pointer`) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
a2cd91ceb0
15 changed files with 76 additions and 45 deletions
|
@ -566,6 +566,25 @@ fn stdout_isatty() -> bool {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME remove these and use winapi 0.3 instead
|
||||||
|
#[cfg(unix)]
|
||||||
|
fn stderr_isatty() -> bool {
|
||||||
|
unsafe { libc::isatty(libc::STDERR_FILENO) != 0 }
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(windows)]
|
||||||
|
fn stderr_isatty() -> bool {
|
||||||
|
use winapi::um::consoleapi::GetConsoleMode;
|
||||||
|
use winapi::um::processenv::GetStdHandle;
|
||||||
|
use winapi::um::winbase::STD_ERROR_HANDLE;
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
let handle = GetStdHandle(STD_ERROR_HANDLE);
|
||||||
|
let mut out = 0;
|
||||||
|
GetConsoleMode(handle, &mut out) != 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn handle_explain(registry: Registry, code: &str, output: ErrorOutputType) {
|
fn handle_explain(registry: Registry, code: &str, output: ErrorOutputType) {
|
||||||
let normalised =
|
let normalised =
|
||||||
if code.starts_with('E') { code.to_string() } else { format!("E{0:0>4}", code) };
|
if code.starts_with('E') { code.to_string() } else { format!("E{0:0>4}", code) };
|
||||||
|
@ -1290,7 +1309,7 @@ pub fn init_env_logger(env: &str) {
|
||||||
Ok(value) => match value.as_ref() {
|
Ok(value) => match value.as_ref() {
|
||||||
"always" => true,
|
"always" => true,
|
||||||
"never" => false,
|
"never" => false,
|
||||||
"auto" => stdout_isatty(),
|
"auto" => stderr_isatty(),
|
||||||
_ => early_error(
|
_ => early_error(
|
||||||
ErrorOutputType::default(),
|
ErrorOutputType::default(),
|
||||||
&format!(
|
&format!(
|
||||||
|
@ -1299,7 +1318,7 @@ pub fn init_env_logger(env: &str) {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
Err(std::env::VarError::NotPresent) => stdout_isatty(),
|
Err(std::env::VarError::NotPresent) => stderr_isatty(),
|
||||||
Err(std::env::VarError::NotUnicode(_value)) => early_error(
|
Err(std::env::VarError::NotUnicode(_value)) => early_error(
|
||||||
ErrorOutputType::default(),
|
ErrorOutputType::default(),
|
||||||
"non-Unicode log color value: expected one of always, never, or auto",
|
"non-Unicode log color value: expected one of always, never, or auto",
|
||||||
|
|
|
@ -13,6 +13,7 @@ use rustc_middle::mir::AssertMessage;
|
||||||
use rustc_session::Limit;
|
use rustc_session::Limit;
|
||||||
use rustc_span::symbol::{sym, Symbol};
|
use rustc_span::symbol::{sym, Symbol};
|
||||||
use rustc_target::abi::{Align, Size};
|
use rustc_target::abi::{Align, Size};
|
||||||
|
use rustc_target::spec::abi::Abi;
|
||||||
|
|
||||||
use crate::interpret::{
|
use crate::interpret::{
|
||||||
self, compile_time_machine, AllocId, Allocation, Frame, ImmTy, InterpCx, InterpResult, Memory,
|
self, compile_time_machine, AllocId, Allocation, Frame, ImmTy, InterpCx, InterpResult, Memory,
|
||||||
|
@ -203,6 +204,7 @@ impl<'mir, 'tcx> interpret::Machine<'mir, 'tcx> for CompileTimeInterpreter<'mir,
|
||||||
fn find_mir_or_eval_fn(
|
fn find_mir_or_eval_fn(
|
||||||
ecx: &mut InterpCx<'mir, 'tcx, Self>,
|
ecx: &mut InterpCx<'mir, 'tcx, Self>,
|
||||||
instance: ty::Instance<'tcx>,
|
instance: ty::Instance<'tcx>,
|
||||||
|
_abi: Abi,
|
||||||
args: &[OpTy<'tcx>],
|
args: &[OpTy<'tcx>],
|
||||||
_ret: Option<(PlaceTy<'tcx>, mir::BasicBlock)>,
|
_ret: Option<(PlaceTy<'tcx>, mir::BasicBlock)>,
|
||||||
_unwind: Option<mir::BasicBlock>, // unwinding is not supported in consts
|
_unwind: Option<mir::BasicBlock>, // unwinding is not supported in consts
|
||||||
|
|
|
@ -10,6 +10,7 @@ use rustc_middle::mir;
|
||||||
use rustc_middle::ty::{self, Ty};
|
use rustc_middle::ty::{self, Ty};
|
||||||
use rustc_span::def_id::DefId;
|
use rustc_span::def_id::DefId;
|
||||||
use rustc_target::abi::Size;
|
use rustc_target::abi::Size;
|
||||||
|
use rustc_target::spec::abi::Abi;
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
AllocId, Allocation, AllocationExtra, CheckInAllocMsg, Frame, ImmTy, InterpCx, InterpResult,
|
AllocId, Allocation, AllocationExtra, CheckInAllocMsg, Frame, ImmTy, InterpCx, InterpResult,
|
||||||
|
@ -144,6 +145,7 @@ pub trait Machine<'mir, 'tcx>: Sized {
|
||||||
fn find_mir_or_eval_fn(
|
fn find_mir_or_eval_fn(
|
||||||
ecx: &mut InterpCx<'mir, 'tcx, Self>,
|
ecx: &mut InterpCx<'mir, 'tcx, Self>,
|
||||||
instance: ty::Instance<'tcx>,
|
instance: ty::Instance<'tcx>,
|
||||||
|
abi: Abi,
|
||||||
args: &[OpTy<'tcx, Self::PointerTag>],
|
args: &[OpTy<'tcx, Self::PointerTag>],
|
||||||
ret: Option<(PlaceTy<'tcx, Self::PointerTag>, mir::BasicBlock)>,
|
ret: Option<(PlaceTy<'tcx, Self::PointerTag>, mir::BasicBlock)>,
|
||||||
unwind: Option<mir::BasicBlock>,
|
unwind: Option<mir::BasicBlock>,
|
||||||
|
@ -154,6 +156,7 @@ pub trait Machine<'mir, 'tcx>: Sized {
|
||||||
fn call_extra_fn(
|
fn call_extra_fn(
|
||||||
ecx: &mut InterpCx<'mir, 'tcx, Self>,
|
ecx: &mut InterpCx<'mir, 'tcx, Self>,
|
||||||
fn_val: Self::ExtraFnVal,
|
fn_val: Self::ExtraFnVal,
|
||||||
|
abi: Abi,
|
||||||
args: &[OpTy<'tcx, Self::PointerTag>],
|
args: &[OpTy<'tcx, Self::PointerTag>],
|
||||||
ret: Option<(PlaceTy<'tcx, Self::PointerTag>, mir::BasicBlock)>,
|
ret: Option<(PlaceTy<'tcx, Self::PointerTag>, mir::BasicBlock)>,
|
||||||
unwind: Option<mir::BasicBlock>,
|
unwind: Option<mir::BasicBlock>,
|
||||||
|
@ -405,6 +408,7 @@ pub macro compile_time_machine(<$mir: lifetime, $tcx: lifetime>) {
|
||||||
fn call_extra_fn(
|
fn call_extra_fn(
|
||||||
_ecx: &mut InterpCx<$mir, $tcx, Self>,
|
_ecx: &mut InterpCx<$mir, $tcx, Self>,
|
||||||
fn_val: !,
|
fn_val: !,
|
||||||
|
_abi: Abi,
|
||||||
_args: &[OpTy<$tcx>],
|
_args: &[OpTy<$tcx>],
|
||||||
_ret: Option<(PlaceTy<$tcx>, mir::BasicBlock)>,
|
_ret: Option<(PlaceTy<$tcx>, mir::BasicBlock)>,
|
||||||
_unwind: Option<mir::BasicBlock>,
|
_unwind: Option<mir::BasicBlock>,
|
||||||
|
|
|
@ -219,7 +219,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
||||||
let instance = match fn_val {
|
let instance = match fn_val {
|
||||||
FnVal::Instance(instance) => instance,
|
FnVal::Instance(instance) => instance,
|
||||||
FnVal::Other(extra) => {
|
FnVal::Other(extra) => {
|
||||||
return M::call_extra_fn(self, extra, args, ret, unwind);
|
return M::call_extra_fn(self, extra, caller_abi, args, ret, unwind);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -264,10 +264,11 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
||||||
| ty::InstanceDef::CloneShim(..)
|
| ty::InstanceDef::CloneShim(..)
|
||||||
| ty::InstanceDef::Item(_) => {
|
| ty::InstanceDef::Item(_) => {
|
||||||
// We need MIR for this fn
|
// We need MIR for this fn
|
||||||
let body = match M::find_mir_or_eval_fn(self, instance, args, ret, unwind)? {
|
let body =
|
||||||
Some(body) => body,
|
match M::find_mir_or_eval_fn(self, instance, caller_abi, args, ret, unwind)? {
|
||||||
None => return Ok(()),
|
Some(body) => body,
|
||||||
};
|
None => return Ok(()),
|
||||||
|
};
|
||||||
|
|
||||||
self.push_stack_frame(
|
self.push_stack_frame(
|
||||||
instance,
|
instance,
|
||||||
|
|
|
@ -25,6 +25,7 @@ use rustc_middle::ty::{
|
||||||
use rustc_session::lint;
|
use rustc_session::lint;
|
||||||
use rustc_span::{def_id::DefId, Span};
|
use rustc_span::{def_id::DefId, Span};
|
||||||
use rustc_target::abi::{HasDataLayout, LayoutOf, Size, TargetDataLayout};
|
use rustc_target::abi::{HasDataLayout, LayoutOf, Size, TargetDataLayout};
|
||||||
|
use rustc_target::spec::abi::Abi;
|
||||||
use rustc_trait_selection::traits;
|
use rustc_trait_selection::traits;
|
||||||
|
|
||||||
use crate::const_eval::ConstEvalErr;
|
use crate::const_eval::ConstEvalErr;
|
||||||
|
@ -187,6 +188,7 @@ impl<'mir, 'tcx> interpret::Machine<'mir, 'tcx> for ConstPropMachine<'mir, 'tcx>
|
||||||
fn find_mir_or_eval_fn(
|
fn find_mir_or_eval_fn(
|
||||||
_ecx: &mut InterpCx<'mir, 'tcx, Self>,
|
_ecx: &mut InterpCx<'mir, 'tcx, Self>,
|
||||||
_instance: ty::Instance<'tcx>,
|
_instance: ty::Instance<'tcx>,
|
||||||
|
_abi: Abi,
|
||||||
_args: &[OpTy<'tcx>],
|
_args: &[OpTy<'tcx>],
|
||||||
_ret: Option<(PlaceTy<'tcx>, BasicBlock)>,
|
_ret: Option<(PlaceTy<'tcx>, BasicBlock)>,
|
||||||
_unwind: Option<BasicBlock>,
|
_unwind: Option<BasicBlock>,
|
||||||
|
|
|
@ -113,7 +113,7 @@ pub(super) fn check_fn<'a, 'tcx>(
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Some(header) = item {
|
if let Some(header) = item {
|
||||||
tcx.sess.span_err(header.span, "A function with the \"rust-call\" ABI must take a single non-self argument that is a tuple")
|
tcx.sess.span_err(header.span, "functions with the \"rust-call\" ABI must take a single non-self argument that is a tuple")
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -123,7 +123,7 @@ The `rustup` option is guaranteed to install a compatible version of the LLVM to
|
||||||
```shell
|
```shell
|
||||||
$ rustup component add llvm-tools-preview
|
$ rustup component add llvm-tools-preview
|
||||||
$ cargo install cargo-binutils
|
$ cargo install cargo-binutils
|
||||||
$ cargo profdata -- --help # note the additional "--" preceeding the tool-specific arguments
|
$ cargo profdata -- --help # note the additional "--" preceding the tool-specific arguments
|
||||||
```
|
```
|
||||||
|
|
||||||
## Creating coverage reports
|
## Creating coverage reports
|
||||||
|
|
|
@ -504,15 +504,9 @@ impl<'a, 'tcx> LinkCollector<'a, 'tcx> {
|
||||||
match res {
|
match res {
|
||||||
// FIXME(#76467): make this fallthrough to lookup the associated
|
// FIXME(#76467): make this fallthrough to lookup the associated
|
||||||
// item a separate function.
|
// item a separate function.
|
||||||
Res::Def(DefKind::AssocFn | DefKind::AssocConst, _) => {
|
Res::Def(DefKind::AssocFn | DefKind::AssocConst, _) => assert_eq!(ns, ValueNS),
|
||||||
assert_eq!(ns, ValueNS);
|
Res::Def(DefKind::AssocTy, _) => assert_eq!(ns, TypeNS),
|
||||||
}
|
Res::Def(DefKind::Variant, _) => return handle_variant(cx, res, extra_fragment),
|
||||||
Res::Def(DefKind::AssocTy, _) => {
|
|
||||||
assert_eq!(ns, TypeNS);
|
|
||||||
}
|
|
||||||
Res::Def(DefKind::Variant, _) => {
|
|
||||||
return handle_variant(cx, res, extra_fragment);
|
|
||||||
}
|
|
||||||
// Not a trait item; just return what we found.
|
// Not a trait item; just return what we found.
|
||||||
Res::Primitive(ty) => {
|
Res::Primitive(ty) => {
|
||||||
if extra_fragment.is_some() {
|
if extra_fragment.is_some() {
|
||||||
|
@ -522,12 +516,7 @@ impl<'a, 'tcx> LinkCollector<'a, 'tcx> {
|
||||||
}
|
}
|
||||||
return Ok((res, Some(ty.as_str().to_owned())));
|
return Ok((res, Some(ty.as_str().to_owned())));
|
||||||
}
|
}
|
||||||
Res::Def(DefKind::Mod, _) => {
|
_ => return Ok((res, extra_fragment.clone())),
|
||||||
return Ok((res, extra_fragment.clone()));
|
|
||||||
}
|
|
||||||
_ => {
|
|
||||||
return Ok((res, extra_fragment.clone()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1024,12 +1013,18 @@ impl LinkCollector<'_, '_> {
|
||||||
|
|
||||||
let resolved_self;
|
let resolved_self;
|
||||||
// replace `Self` with suitable item's parent name
|
// replace `Self` with suitable item's parent name
|
||||||
if path_str.starts_with("Self::") {
|
let is_lone_self = path_str == "Self";
|
||||||
|
let is_lone_crate = path_str == "crate";
|
||||||
|
if path_str.starts_with("Self::") || is_lone_self {
|
||||||
if let Some(ref name) = self_name {
|
if let Some(ref name) = self_name {
|
||||||
resolved_self = format!("{}::{}", name, &path_str[6..]);
|
if is_lone_self {
|
||||||
path_str = &resolved_self;
|
path_str = name;
|
||||||
|
} else {
|
||||||
|
resolved_self = format!("{}::{}", name, &path_str[6..]);
|
||||||
|
path_str = &resolved_self;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if path_str.starts_with("crate::") {
|
} else if path_str.starts_with("crate::") || is_lone_crate {
|
||||||
use rustc_span::def_id::CRATE_DEF_INDEX;
|
use rustc_span::def_id::CRATE_DEF_INDEX;
|
||||||
|
|
||||||
// HACK(jynelson): rustc_resolve thinks that `crate` is the crate currently being documented.
|
// HACK(jynelson): rustc_resolve thinks that `crate` is the crate currently being documented.
|
||||||
|
@ -1038,8 +1033,12 @@ impl LinkCollector<'_, '_> {
|
||||||
// HACK(jynelson)(2): If we just strip `crate::` then suddenly primitives become ambiguous
|
// HACK(jynelson)(2): If we just strip `crate::` then suddenly primitives become ambiguous
|
||||||
// (consider `crate::char`). Instead, change it to `self::`. This works because 'self' is now the crate root.
|
// (consider `crate::char`). Instead, change it to `self::`. This works because 'self' is now the crate root.
|
||||||
// FIXME(#78696): This doesn't always work.
|
// FIXME(#78696): This doesn't always work.
|
||||||
resolved_self = format!("self::{}", &path_str["crate::".len()..]);
|
if is_lone_crate {
|
||||||
path_str = &resolved_self;
|
path_str = "self";
|
||||||
|
} else {
|
||||||
|
resolved_self = format!("self::{}", &path_str["crate::".len()..]);
|
||||||
|
path_str = &resolved_self;
|
||||||
|
}
|
||||||
module_id = DefId { krate, index: CRATE_DEF_INDEX };
|
module_id = DefId { krate, index: CRATE_DEF_INDEX };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2092,7 +2091,7 @@ fn resolve_primitive(path_str: &str, ns: Namespace) -> Option<Res> {
|
||||||
"array" => Array,
|
"array" => Array,
|
||||||
"tuple" => Tuple,
|
"tuple" => Tuple,
|
||||||
"unit" => Unit,
|
"unit" => Unit,
|
||||||
"pointer" | "*" | "*const" | "*mut" => RawPointer,
|
"pointer" | "*const" | "*mut" => RawPointer,
|
||||||
"reference" | "&" | "&mut" => Reference,
|
"reference" | "&" | "&mut" => Reference,
|
||||||
"fn" => Fn,
|
"fn" => Fn,
|
||||||
"never" | "!" => Never,
|
"never" | "!" => Never,
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
#![crate_name = "cross_crate_self"]
|
#![crate_name = "cross_crate_self"]
|
||||||
|
|
||||||
|
/// Link to [Self]
|
||||||
|
/// Link to [crate]
|
||||||
pub struct S;
|
pub struct S;
|
||||||
|
|
||||||
impl S {
|
impl S {
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
// aux-build:self.rs
|
// aux-build:self.rs
|
||||||
|
// build-aux-docs
|
||||||
|
|
||||||
extern crate cross_crate_self;
|
extern crate cross_crate_self;
|
||||||
|
|
||||||
// @has self/struct.S.html '//a[@href="../self/struct.S.html#method.f"]' "Self::f"
|
// @has self/struct.S.html '//a[@href="../self/struct.S.html#method.f"]' "Self::f"
|
||||||
|
// @has self/struct.S.html '//a[@href="../self/struct.S.html"]' "Self"
|
||||||
|
// @has self/struct.S.html '//a[@href="../cross_crate_self/index.html"]' "crate"
|
||||||
pub use cross_crate_self::S;
|
pub use cross_crate_self::S;
|
||||||
|
|
|
@ -11,11 +11,9 @@
|
||||||
// @has - '//a[@href="https://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.is_null"]' 'pointer::is_null'
|
// @has - '//a[@href="https://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.is_null"]' 'pointer::is_null'
|
||||||
// @has - '//a[@href="https://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.is_null"]' '*const::is_null'
|
// @has - '//a[@href="https://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.is_null"]' '*const::is_null'
|
||||||
// @has - '//a[@href="https://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.is_null"]' '*mut::is_null'
|
// @has - '//a[@href="https://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.is_null"]' '*mut::is_null'
|
||||||
// @has - '//a[@href="https://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.is_null"]' '*::is_null'
|
|
||||||
//! [pointer::is_null]
|
//! [pointer::is_null]
|
||||||
//! [*const::is_null]
|
//! [*const::is_null]
|
||||||
//! [*mut::is_null]
|
//! [*mut::is_null]
|
||||||
//! [*::is_null]
|
|
||||||
|
|
||||||
// @has - '//a[@href="https://doc.rust-lang.org/nightly/std/primitive.unit.html"]' 'unit'
|
// @has - '//a[@href="https://doc.rust-lang.org/nightly/std/primitive.unit.html"]' 'unit'
|
||||||
//! [unit]
|
//! [unit]
|
||||||
|
|
|
@ -1,25 +1,25 @@
|
||||||
#![feature(unboxed_closures)]
|
#![feature(unboxed_closures)]
|
||||||
|
|
||||||
extern "rust-call" fn b(_i: i32) {}
|
extern "rust-call" fn b(_i: i32) {}
|
||||||
//~^ ERROR A function with the "rust-call" ABI must take a single non-self argument that is a tuple
|
//~^ ERROR functions with the "rust-call" ABI must take a single non-self argument that is a tuple
|
||||||
|
|
||||||
trait Tr {
|
trait Tr {
|
||||||
extern "rust-call" fn a();
|
extern "rust-call" fn a();
|
||||||
|
|
||||||
extern "rust-call" fn b() {}
|
extern "rust-call" fn b() {}
|
||||||
//~^ ERROR A function with the "rust-call" ABI must take a single non-self argument
|
//~^ ERROR functions with the "rust-call" ABI must take a single non-self argument
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Foo;
|
struct Foo;
|
||||||
|
|
||||||
impl Foo {
|
impl Foo {
|
||||||
extern "rust-call" fn bar() {}
|
extern "rust-call" fn bar() {}
|
||||||
//~^ ERROR A function with the "rust-call" ABI must take a single non-self argument
|
//~^ ERROR functions with the "rust-call" ABI must take a single non-self argument
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Tr for Foo {
|
impl Tr for Foo {
|
||||||
extern "rust-call" fn a() {}
|
extern "rust-call" fn a() {}
|
||||||
//~^ ERROR A function with the "rust-call" ABI must take a single non-self argument
|
//~^ ERROR functions with the "rust-call" ABI must take a single non-self argument
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main () {
|
fn main () {
|
||||||
|
|
|
@ -1,22 +1,22 @@
|
||||||
error: A function with the "rust-call" ABI must take a single non-self argument that is a tuple
|
error: functions with the "rust-call" ABI must take a single non-self argument that is a tuple
|
||||||
--> $DIR/issue-22565-rust-call.rs:3:1
|
--> $DIR/issue-22565-rust-call.rs:3:1
|
||||||
|
|
|
|
||||||
LL | extern "rust-call" fn b(_i: i32) {}
|
LL | extern "rust-call" fn b(_i: i32) {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: A function with the "rust-call" ABI must take a single non-self argument that is a tuple
|
error: functions with the "rust-call" ABI must take a single non-self argument that is a tuple
|
||||||
--> $DIR/issue-22565-rust-call.rs:9:5
|
--> $DIR/issue-22565-rust-call.rs:9:5
|
||||||
|
|
|
|
||||||
LL | extern "rust-call" fn b() {}
|
LL | extern "rust-call" fn b() {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: A function with the "rust-call" ABI must take a single non-self argument that is a tuple
|
error: functions with the "rust-call" ABI must take a single non-self argument that is a tuple
|
||||||
--> $DIR/issue-22565-rust-call.rs:16:5
|
--> $DIR/issue-22565-rust-call.rs:16:5
|
||||||
|
|
|
|
||||||
LL | extern "rust-call" fn bar() {}
|
LL | extern "rust-call" fn bar() {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: A function with the "rust-call" ABI must take a single non-self argument that is a tuple
|
error: functions with the "rust-call" ABI must take a single non-self argument that is a tuple
|
||||||
--> $DIR/issue-22565-rust-call.rs:21:5
|
--> $DIR/issue-22565-rust-call.rs:21:5
|
||||||
|
|
|
|
||||||
LL | extern "rust-call" fn a() {}
|
LL | extern "rust-call" fn a() {}
|
||||||
|
|
|
@ -11,13 +11,13 @@ impl FnMut<isize> for S {
|
||||||
extern "rust-call" fn call_mut(&mut self, z: isize) -> isize {
|
extern "rust-call" fn call_mut(&mut self, z: isize) -> isize {
|
||||||
self.x + self.y + z
|
self.x + self.y + z
|
||||||
}
|
}
|
||||||
//~^^^ ERROR A function with the "rust-call" ABI must take a single non-self argument
|
//~^^^ ERROR functions with the "rust-call" ABI must take a single non-self argument
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FnOnce<isize> for S {
|
impl FnOnce<isize> for S {
|
||||||
type Output = isize;
|
type Output = isize;
|
||||||
extern "rust-call" fn call_once(mut self, z: isize) -> isize { self.call_mut(z) }
|
extern "rust-call" fn call_once(mut self, z: isize) -> isize { self.call_mut(z) }
|
||||||
//~^ ERROR A function with the "rust-call" ABI must take a single non-self argument
|
//~^ ERROR functions with the "rust-call" ABI must take a single non-self argument
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
error: A function with the "rust-call" ABI must take a single non-self argument that is a tuple
|
error: functions with the "rust-call" ABI must take a single non-self argument that is a tuple
|
||||||
--> $DIR/overloaded-calls-nontuple.rs:11:5
|
--> $DIR/overloaded-calls-nontuple.rs:11:5
|
||||||
|
|
|
|
||||||
LL | extern "rust-call" fn call_mut(&mut self, z: isize) -> isize {
|
LL | extern "rust-call" fn call_mut(&mut self, z: isize) -> isize {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: A function with the "rust-call" ABI must take a single non-self argument that is a tuple
|
error: functions with the "rust-call" ABI must take a single non-self argument that is a tuple
|
||||||
--> $DIR/overloaded-calls-nontuple.rs:19:5
|
--> $DIR/overloaded-calls-nontuple.rs:19:5
|
||||||
|
|
|
|
||||||
LL | extern "rust-call" fn call_once(mut self, z: isize) -> isize { self.call_mut(z) }
|
LL | extern "rust-call" fn call_once(mut self, z: isize) -> isize { self.call_mut(z) }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue