mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 08:44:35 +00:00
Auto merge of #99391 - JohnTitor:rollup-tdigzzo, r=JohnTitor
Rollup of 6 pull requests Successful merges: - #98383 (Remove restrictions on compare-exchange memory ordering.) - #99350 (Be more precise when suggesting removal of parens on unit ctor) - #99356 (Do not constraint TAITs when checking impl/trait item compatibility) - #99360 (Do not ICE when we have `-Zunpretty=expanded` with invalid ABI) - #99373 (Fix source code sidebar tree auto-expand) - #99374 (Fix doc for `rchunks_exact`) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
e1d9a202fc
@ -274,6 +274,7 @@ impl<'a> PostExpansionVisitor<'a> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
abi => {
|
abi => {
|
||||||
|
if self.sess.opts.pretty.map_or(true, |ppm| ppm.needs_hir()) {
|
||||||
self.sess.parse_sess.span_diagnostic.delay_span_bug(
|
self.sess.parse_sess.span_diagnostic.delay_span_bug(
|
||||||
span,
|
span,
|
||||||
&format!("unrecognized ABI not caught in lowering: {}", abi),
|
&format!("unrecognized ABI not caught in lowering: {}", abi),
|
||||||
@ -281,6 +282,7 @@ impl<'a> PostExpansionVisitor<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn check_extern(&self, ext: ast::Extern, constness: ast::Const) {
|
fn check_extern(&self, ext: ast::Extern, constness: ast::Const) {
|
||||||
if let ast::Extern::Explicit(abi, _) = ext {
|
if let ast::Extern::Explicit(abi, _) = ext {
|
||||||
|
@ -211,6 +211,10 @@ pub fn path_to_string(segment: &hir::Path<'_>) -> String {
|
|||||||
to_string(NO_ANN, |s| s.print_path(segment, false))
|
to_string(NO_ANN, |s| s.print_path(segment, false))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn qpath_to_string(segment: &hir::QPath<'_>) -> String {
|
||||||
|
to_string(NO_ANN, |s| s.print_qpath(segment, false))
|
||||||
|
}
|
||||||
|
|
||||||
pub fn fn_to_string(
|
pub fn fn_to_string(
|
||||||
decl: &hir::FnDecl<'_>,
|
decl: &hir::FnDecl<'_>,
|
||||||
header: hir::FnHeader,
|
header: hir::FnHeader,
|
||||||
|
@ -2707,6 +2707,14 @@ impl PpMode {
|
|||||||
| MirCFG => true,
|
| MirCFG => true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pub fn needs_hir(&self) -> bool {
|
||||||
|
use PpMode::*;
|
||||||
|
match *self {
|
||||||
|
Source(_) | AstTree(_) => false,
|
||||||
|
|
||||||
|
Hir(_) | HirTree | ThirTree | Mir | MirCFG => true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn needs_analysis(&self) -> bool {
|
pub fn needs_analysis(&self) -> bool {
|
||||||
use PpMode::*;
|
use PpMode::*;
|
||||||
|
@ -4,7 +4,7 @@ use crate::type_error_struct;
|
|||||||
|
|
||||||
use rustc_errors::{struct_span_err, Applicability, Diagnostic};
|
use rustc_errors::{struct_span_err, Applicability, Diagnostic};
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_hir::def::{Namespace, Res};
|
use rustc_hir::def::{self, Namespace, Res};
|
||||||
use rustc_hir::def_id::{DefId, LOCAL_CRATE};
|
use rustc_hir::def_id::{DefId, LOCAL_CRATE};
|
||||||
use rustc_infer::{
|
use rustc_infer::{
|
||||||
infer,
|
infer,
|
||||||
@ -390,17 +390,22 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
(fn_sig, Some(def_id))
|
(fn_sig, Some(def_id))
|
||||||
}
|
}
|
||||||
ty::FnPtr(sig) => (sig, None),
|
ty::FnPtr(sig) => (sig, None),
|
||||||
ref t => {
|
_ => {
|
||||||
let mut unit_variant = None;
|
let mut unit_variant = None;
|
||||||
let mut removal_span = call_expr.span;
|
if let hir::ExprKind::Path(qpath) = &callee_expr.kind
|
||||||
if let ty::Adt(adt_def, ..) = t
|
&& let Res::Def(def::DefKind::Ctor(kind, def::CtorKind::Const), _)
|
||||||
&& adt_def.is_enum()
|
= self.typeck_results.borrow().qpath_res(qpath, callee_expr.hir_id)
|
||||||
&& let hir::ExprKind::Call(expr, _) = call_expr.kind
|
// Only suggest removing parens if there are no arguments
|
||||||
|
&& arg_exprs.is_empty()
|
||||||
{
|
{
|
||||||
removal_span =
|
let descr = match kind {
|
||||||
expr.span.shrink_to_hi().to(call_expr.span.shrink_to_hi());
|
def::CtorOf::Struct => "struct",
|
||||||
|
def::CtorOf::Variant => "enum variant",
|
||||||
|
};
|
||||||
|
let removal_span =
|
||||||
|
callee_expr.span.shrink_to_hi().to(call_expr.span.shrink_to_hi());
|
||||||
unit_variant =
|
unit_variant =
|
||||||
self.tcx.sess.source_map().span_to_snippet(expr.span).ok();
|
Some((removal_span, descr, rustc_hir_pretty::qpath_to_string(qpath)));
|
||||||
}
|
}
|
||||||
|
|
||||||
let callee_ty = self.resolve_vars_if_possible(callee_ty);
|
let callee_ty = self.resolve_vars_if_possible(callee_ty);
|
||||||
@ -410,8 +415,8 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
callee_ty,
|
callee_ty,
|
||||||
E0618,
|
E0618,
|
||||||
"expected function, found {}",
|
"expected function, found {}",
|
||||||
match unit_variant {
|
match &unit_variant {
|
||||||
Some(ref path) => format!("enum variant `{path}`"),
|
Some((_, kind, path)) => format!("{kind} `{path}`"),
|
||||||
None => format!("`{callee_ty}`"),
|
None => format!("`{callee_ty}`"),
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -423,11 +428,11 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
callee_expr.span,
|
callee_expr.span,
|
||||||
);
|
);
|
||||||
|
|
||||||
if let Some(ref path) = unit_variant {
|
if let Some((removal_span, kind, path)) = &unit_variant {
|
||||||
err.span_suggestion_verbose(
|
err.span_suggestion_verbose(
|
||||||
removal_span,
|
*removal_span,
|
||||||
&format!(
|
&format!(
|
||||||
"`{path}` is a unit variant, you need to write it without the parentheses",
|
"`{path}` is a unit {kind}, and does not take parentheses to be constructed",
|
||||||
),
|
),
|
||||||
"",
|
"",
|
||||||
Applicability::MachineApplicable,
|
Applicability::MachineApplicable,
|
||||||
@ -470,7 +475,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
if let Some(span) = self.tcx.hir().res_span(def) {
|
if let Some(span) = self.tcx.hir().res_span(def) {
|
||||||
let callee_ty = callee_ty.to_string();
|
let callee_ty = callee_ty.to_string();
|
||||||
let label = match (unit_variant, inner_callee_path) {
|
let label = match (unit_variant, inner_callee_path) {
|
||||||
(Some(path), _) => Some(format!("`{path}` defined here")),
|
(Some((_, kind, path)), _) => Some(format!("{kind} `{path}` defined here")),
|
||||||
(_, Some(hir::QPath::Resolved(_, path))) => self
|
(_, Some(hir::QPath::Resolved(_, path))) => self
|
||||||
.tcx
|
.tcx
|
||||||
.sess
|
.sess
|
||||||
|
@ -1505,6 +1505,21 @@ pub fn check_type_bounds<'tcx>(
|
|||||||
&outlives_environment,
|
&outlives_environment,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let constraints = infcx.inner.borrow_mut().opaque_type_storage.take_opaque_types();
|
||||||
|
for (key, value) in constraints {
|
||||||
|
infcx
|
||||||
|
.report_mismatched_types(
|
||||||
|
&ObligationCause::misc(
|
||||||
|
value.hidden_type.span,
|
||||||
|
tcx.hir().local_def_id_to_hir_id(impl_ty.def_id.expect_local()),
|
||||||
|
),
|
||||||
|
tcx.mk_opaque(key.def_id, key.substs),
|
||||||
|
value.hidden_type.ty,
|
||||||
|
TypeError::Mismatch,
|
||||||
|
)
|
||||||
|
.emit();
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -531,7 +531,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
tcx.ty_error()
|
tcx.ty_error()
|
||||||
}
|
}
|
||||||
Res::Def(DefKind::Ctor(_, CtorKind::Fictive), _) => {
|
Res::Def(DefKind::Ctor(_, CtorKind::Fictive), _) => {
|
||||||
report_unexpected_variant_res(tcx, res, expr.span);
|
report_unexpected_variant_res(tcx, res, qpath, expr.span);
|
||||||
tcx.ty_error()
|
tcx.ty_error()
|
||||||
}
|
}
|
||||||
_ => self.instantiate_value_path(segs, opt_ty, res, expr.span, expr.hir_id).0,
|
_ => self.instantiate_value_path(segs, opt_ty, res, expr.span, expr.hir_id).0,
|
||||||
|
@ -863,17 +863,14 @@ fn bad_non_zero_sized_fields<'tcx>(
|
|||||||
err.emit();
|
err.emit();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn report_unexpected_variant_res(tcx: TyCtxt<'_>, res: Res, span: Span) {
|
fn report_unexpected_variant_res(tcx: TyCtxt<'_>, res: Res, qpath: &hir::QPath<'_>, span: Span) {
|
||||||
struct_span_err!(
|
struct_span_err!(
|
||||||
tcx.sess,
|
tcx.sess,
|
||||||
span,
|
span,
|
||||||
E0533,
|
E0533,
|
||||||
"expected unit struct, unit variant or constant, found {}{}",
|
"expected unit struct, unit variant or constant, found {} `{}`",
|
||||||
res.descr(),
|
res.descr(),
|
||||||
tcx.sess
|
rustc_hir_pretty::qpath_to_string(qpath),
|
||||||
.source_map()
|
|
||||||
.span_to_snippet(span)
|
|
||||||
.map_or_else(|_| String::new(), |s| format!(" `{s}`",)),
|
|
||||||
)
|
)
|
||||||
.emit();
|
.emit();
|
||||||
}
|
}
|
||||||
|
@ -183,7 +183,9 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
PatKind::TupleStruct(ref qpath, subpats, ddpos) => {
|
PatKind::TupleStruct(ref qpath, subpats, ddpos) => {
|
||||||
self.check_pat_tuple_struct(pat, qpath, subpats, ddpos, expected, def_bm, ti)
|
self.check_pat_tuple_struct(pat, qpath, subpats, ddpos, expected, def_bm, ti)
|
||||||
}
|
}
|
||||||
PatKind::Path(_) => self.check_pat_path(pat, path_res.unwrap(), expected, ti),
|
PatKind::Path(ref qpath) => {
|
||||||
|
self.check_pat_path(pat, qpath, path_res.unwrap(), expected, ti)
|
||||||
|
}
|
||||||
PatKind::Struct(ref qpath, fields, has_rest_pat) => {
|
PatKind::Struct(ref qpath, fields, has_rest_pat) => {
|
||||||
self.check_pat_struct(pat, qpath, fields, has_rest_pat, expected, def_bm, ti)
|
self.check_pat_struct(pat, qpath, fields, has_rest_pat, expected, def_bm, ti)
|
||||||
}
|
}
|
||||||
@ -800,6 +802,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
fn check_pat_path<'b>(
|
fn check_pat_path<'b>(
|
||||||
&self,
|
&self,
|
||||||
pat: &Pat<'_>,
|
pat: &Pat<'_>,
|
||||||
|
qpath: &hir::QPath<'_>,
|
||||||
path_resolution: (Res, Option<Ty<'tcx>>, &'b [hir::PathSegment<'b>]),
|
path_resolution: (Res, Option<Ty<'tcx>>, &'b [hir::PathSegment<'b>]),
|
||||||
expected: Ty<'tcx>,
|
expected: Ty<'tcx>,
|
||||||
ti: TopInfo<'tcx>,
|
ti: TopInfo<'tcx>,
|
||||||
@ -814,7 +817,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
return tcx.ty_error();
|
return tcx.ty_error();
|
||||||
}
|
}
|
||||||
Res::Def(DefKind::AssocFn | DefKind::Ctor(_, CtorKind::Fictive | CtorKind::Fn), _) => {
|
Res::Def(DefKind::AssocFn | DefKind::Ctor(_, CtorKind::Fictive | CtorKind::Fn), _) => {
|
||||||
report_unexpected_variant_res(tcx, res, pat.span);
|
report_unexpected_variant_res(tcx, res, qpath, pat.span);
|
||||||
return tcx.ty_error();
|
return tcx.ty_error();
|
||||||
}
|
}
|
||||||
Res::SelfCtor(..)
|
Res::SelfCtor(..)
|
||||||
|
@ -1340,7 +1340,7 @@ impl<T> [T] {
|
|||||||
/// from the `remainder` function of the iterator.
|
/// from the `remainder` function of the iterator.
|
||||||
///
|
///
|
||||||
/// Due to each chunk having exactly `chunk_size` elements, the compiler can often optimize the
|
/// Due to each chunk having exactly `chunk_size` elements, the compiler can often optimize the
|
||||||
/// resulting code better than in the case of [`chunks`].
|
/// resulting code better than in the case of [`rchunks`].
|
||||||
///
|
///
|
||||||
/// See [`rchunks`] for a variant of this iterator that also returns the remainder as a smaller
|
/// See [`rchunks`] for a variant of this iterator that also returns the remainder as a smaller
|
||||||
/// chunk, and [`chunks_exact`] for the same iterator but starting at the beginning of the
|
/// chunk, and [`chunks_exact`] for the same iterator but starting at the beginning of the
|
||||||
|
@ -581,8 +581,7 @@ impl AtomicBool {
|
|||||||
/// `failure` describes the required ordering for the load operation that takes place when
|
/// `failure` describes the required ordering for the load operation that takes place when
|
||||||
/// the comparison fails. Using [`Acquire`] as success ordering makes the store part
|
/// the comparison fails. Using [`Acquire`] as success ordering makes the store part
|
||||||
/// of this operation [`Relaxed`], and using [`Release`] makes the successful load
|
/// of this operation [`Relaxed`], and using [`Release`] makes the successful load
|
||||||
/// [`Relaxed`]. The failure ordering can only be [`SeqCst`], [`Acquire`] or [`Relaxed`]
|
/// [`Relaxed`]. The failure ordering can only be [`SeqCst`], [`Acquire`] or [`Relaxed`].
|
||||||
/// and must be equivalent to or weaker than the success ordering.
|
|
||||||
///
|
///
|
||||||
/// **Note:** This method is only available on platforms that support atomic
|
/// **Note:** This method is only available on platforms that support atomic
|
||||||
/// operations on `u8`.
|
/// operations on `u8`.
|
||||||
@ -640,8 +639,7 @@ impl AtomicBool {
|
|||||||
/// `failure` describes the required ordering for the load operation that takes place when
|
/// `failure` describes the required ordering for the load operation that takes place when
|
||||||
/// the comparison fails. Using [`Acquire`] as success ordering makes the store part
|
/// the comparison fails. Using [`Acquire`] as success ordering makes the store part
|
||||||
/// of this operation [`Relaxed`], and using [`Release`] makes the successful load
|
/// of this operation [`Relaxed`], and using [`Release`] makes the successful load
|
||||||
/// [`Relaxed`]. The failure ordering can only be [`SeqCst`], [`Acquire`] or [`Relaxed`]
|
/// [`Relaxed`]. The failure ordering can only be [`SeqCst`], [`Acquire`] or [`Relaxed`].
|
||||||
/// and must be equivalent to or weaker than the success ordering.
|
|
||||||
///
|
///
|
||||||
/// **Note:** This method is only available on platforms that support atomic
|
/// **Note:** This method is only available on platforms that support atomic
|
||||||
/// operations on `u8`.
|
/// operations on `u8`.
|
||||||
@ -941,8 +939,7 @@ impl AtomicBool {
|
|||||||
/// Using [`Acquire`] as success ordering makes the store part of this
|
/// Using [`Acquire`] as success ordering makes the store part of this
|
||||||
/// operation [`Relaxed`], and using [`Release`] makes the final successful
|
/// operation [`Relaxed`], and using [`Release`] makes the final successful
|
||||||
/// load [`Relaxed`]. The (failed) load ordering can only be [`SeqCst`],
|
/// load [`Relaxed`]. The (failed) load ordering can only be [`SeqCst`],
|
||||||
/// [`Acquire`] or [`Relaxed`] and must be equivalent to or weaker than the
|
/// [`Acquire`] or [`Relaxed`].
|
||||||
/// success ordering.
|
|
||||||
///
|
///
|
||||||
/// **Note:** This method is only available on platforms that support atomic
|
/// **Note:** This method is only available on platforms that support atomic
|
||||||
/// operations on `u8`.
|
/// operations on `u8`.
|
||||||
@ -1301,8 +1298,7 @@ impl<T> AtomicPtr<T> {
|
|||||||
/// `failure` describes the required ordering for the load operation that takes place when
|
/// `failure` describes the required ordering for the load operation that takes place when
|
||||||
/// the comparison fails. Using [`Acquire`] as success ordering makes the store part
|
/// the comparison fails. Using [`Acquire`] as success ordering makes the store part
|
||||||
/// of this operation [`Relaxed`], and using [`Release`] makes the successful load
|
/// of this operation [`Relaxed`], and using [`Release`] makes the successful load
|
||||||
/// [`Relaxed`]. The failure ordering can only be [`SeqCst`], [`Acquire`] or [`Relaxed`]
|
/// [`Relaxed`]. The failure ordering can only be [`SeqCst`], [`Acquire`] or [`Relaxed`].
|
||||||
/// and must be equivalent to or weaker than the success ordering.
|
|
||||||
///
|
///
|
||||||
/// **Note:** This method is only available on platforms that support atomic
|
/// **Note:** This method is only available on platforms that support atomic
|
||||||
/// operations on pointers.
|
/// operations on pointers.
|
||||||
@ -1347,8 +1343,7 @@ impl<T> AtomicPtr<T> {
|
|||||||
/// `failure` describes the required ordering for the load operation that takes place when
|
/// `failure` describes the required ordering for the load operation that takes place when
|
||||||
/// the comparison fails. Using [`Acquire`] as success ordering makes the store part
|
/// the comparison fails. Using [`Acquire`] as success ordering makes the store part
|
||||||
/// of this operation [`Relaxed`], and using [`Release`] makes the successful load
|
/// of this operation [`Relaxed`], and using [`Release`] makes the successful load
|
||||||
/// [`Relaxed`]. The failure ordering can only be [`SeqCst`], [`Acquire`] or [`Relaxed`]
|
/// [`Relaxed`]. The failure ordering can only be [`SeqCst`], [`Acquire`] or [`Relaxed`].
|
||||||
/// and must be equivalent to or weaker than the success ordering.
|
|
||||||
///
|
///
|
||||||
/// **Note:** This method is only available on platforms that support atomic
|
/// **Note:** This method is only available on platforms that support atomic
|
||||||
/// operations on pointers.
|
/// operations on pointers.
|
||||||
@ -1404,8 +1399,7 @@ impl<T> AtomicPtr<T> {
|
|||||||
/// Using [`Acquire`] as success ordering makes the store part of this
|
/// Using [`Acquire`] as success ordering makes the store part of this
|
||||||
/// operation [`Relaxed`], and using [`Release`] makes the final successful
|
/// operation [`Relaxed`], and using [`Release`] makes the final successful
|
||||||
/// load [`Relaxed`]. The (failed) load ordering can only be [`SeqCst`],
|
/// load [`Relaxed`]. The (failed) load ordering can only be [`SeqCst`],
|
||||||
/// [`Acquire`] or [`Relaxed`] and must be equivalent to or weaker than the
|
/// [`Acquire`] or [`Relaxed`].
|
||||||
/// success ordering.
|
|
||||||
///
|
///
|
||||||
/// **Note:** This method is only available on platforms that support atomic
|
/// **Note:** This method is only available on platforms that support atomic
|
||||||
/// operations on pointers.
|
/// operations on pointers.
|
||||||
@ -2227,8 +2221,7 @@ macro_rules! atomic_int {
|
|||||||
/// `failure` describes the required ordering for the load operation that takes place when
|
/// `failure` describes the required ordering for the load operation that takes place when
|
||||||
/// the comparison fails. Using [`Acquire`] as success ordering makes the store part
|
/// the comparison fails. Using [`Acquire`] as success ordering makes the store part
|
||||||
/// of this operation [`Relaxed`], and using [`Release`] makes the successful load
|
/// of this operation [`Relaxed`], and using [`Release`] makes the successful load
|
||||||
/// [`Relaxed`]. The failure ordering can only be [`SeqCst`], [`Acquire`] or [`Relaxed`]
|
/// [`Relaxed`]. The failure ordering can only be [`SeqCst`], [`Acquire`] or [`Relaxed`].
|
||||||
/// and must be equivalent to or weaker than the success ordering.
|
|
||||||
///
|
///
|
||||||
/// **Note**: This method is only available on platforms that support atomic operations on
|
/// **Note**: This method is only available on platforms that support atomic operations on
|
||||||
#[doc = concat!("[`", $s_int_type, "`].")]
|
#[doc = concat!("[`", $s_int_type, "`].")]
|
||||||
@ -2279,8 +2272,7 @@ macro_rules! atomic_int {
|
|||||||
/// `failure` describes the required ordering for the load operation that takes place when
|
/// `failure` describes the required ordering for the load operation that takes place when
|
||||||
/// the comparison fails. Using [`Acquire`] as success ordering makes the store part
|
/// the comparison fails. Using [`Acquire`] as success ordering makes the store part
|
||||||
/// of this operation [`Relaxed`], and using [`Release`] makes the successful load
|
/// of this operation [`Relaxed`], and using [`Release`] makes the successful load
|
||||||
/// [`Relaxed`]. The failure ordering can only be [`SeqCst`], [`Acquire`] or [`Relaxed`]
|
/// [`Relaxed`]. The failure ordering can only be [`SeqCst`], [`Acquire`] or [`Relaxed`].
|
||||||
/// and must be equivalent to or weaker than the success ordering.
|
|
||||||
///
|
///
|
||||||
/// **Note**: This method is only available on platforms that support atomic operations on
|
/// **Note**: This method is only available on platforms that support atomic operations on
|
||||||
#[doc = concat!("[`", $s_int_type, "`].")]
|
#[doc = concat!("[`", $s_int_type, "`].")]
|
||||||
@ -2517,8 +2509,7 @@ macro_rules! atomic_int {
|
|||||||
///
|
///
|
||||||
/// Using [`Acquire`] as success ordering makes the store part
|
/// Using [`Acquire`] as success ordering makes the store part
|
||||||
/// of this operation [`Relaxed`], and using [`Release`] makes the final successful load
|
/// of this operation [`Relaxed`], and using [`Release`] makes the final successful load
|
||||||
/// [`Relaxed`]. The (failed) load ordering can only be [`SeqCst`], [`Acquire`] or [`Relaxed`]
|
/// [`Relaxed`]. The (failed) load ordering can only be [`SeqCst`], [`Acquire`] or [`Relaxed`].
|
||||||
/// and must be equivalent to or weaker than the success ordering.
|
|
||||||
///
|
///
|
||||||
/// **Note**: This method is only available on platforms that support atomic operations on
|
/// **Note**: This method is only available on platforms that support atomic operations on
|
||||||
#[doc = concat!("[`", $s_int_type, "`].")]
|
#[doc = concat!("[`", $s_int_type, "`].")]
|
||||||
@ -3035,22 +3026,29 @@ unsafe fn atomic_compare_exchange<T: Copy>(
|
|||||||
let (val, ok) = unsafe {
|
let (val, ok) = unsafe {
|
||||||
match (success, failure) {
|
match (success, failure) {
|
||||||
(Relaxed, Relaxed) => intrinsics::atomic_cxchg_relaxed_relaxed(dst, old, new),
|
(Relaxed, Relaxed) => intrinsics::atomic_cxchg_relaxed_relaxed(dst, old, new),
|
||||||
//(Relaxed, Acquire) => intrinsics::atomic_cxchg_relaxed_acquire(dst, old, new),
|
#[cfg(not(bootstrap))]
|
||||||
//(Relaxed, SeqCst) => intrinsics::atomic_cxchg_relaxed_seqcst(dst, old, new),
|
(Relaxed, Acquire) => intrinsics::atomic_cxchg_relaxed_acquire(dst, old, new),
|
||||||
|
#[cfg(not(bootstrap))]
|
||||||
|
(Relaxed, SeqCst) => intrinsics::atomic_cxchg_relaxed_seqcst(dst, old, new),
|
||||||
(Acquire, Relaxed) => intrinsics::atomic_cxchg_acquire_relaxed(dst, old, new),
|
(Acquire, Relaxed) => intrinsics::atomic_cxchg_acquire_relaxed(dst, old, new),
|
||||||
(Acquire, Acquire) => intrinsics::atomic_cxchg_acquire_acquire(dst, old, new),
|
(Acquire, Acquire) => intrinsics::atomic_cxchg_acquire_acquire(dst, old, new),
|
||||||
//(Acquire, SeqCst) => intrinsics::atomic_cxchg_acquire_seqcst(dst, old, new),
|
#[cfg(not(bootstrap))]
|
||||||
|
(Acquire, SeqCst) => intrinsics::atomic_cxchg_acquire_seqcst(dst, old, new),
|
||||||
(Release, Relaxed) => intrinsics::atomic_cxchg_release_relaxed(dst, old, new),
|
(Release, Relaxed) => intrinsics::atomic_cxchg_release_relaxed(dst, old, new),
|
||||||
//(Release, Acquire) => intrinsics::atomic_cxchg_release_acquire(dst, old, new),
|
#[cfg(not(bootstrap))]
|
||||||
//(Release, SeqCst) => intrinsics::atomic_cxchg_release_seqcst(dst, old, new),
|
(Release, Acquire) => intrinsics::atomic_cxchg_release_acquire(dst, old, new),
|
||||||
|
#[cfg(not(bootstrap))]
|
||||||
|
(Release, SeqCst) => intrinsics::atomic_cxchg_release_seqcst(dst, old, new),
|
||||||
(AcqRel, Relaxed) => intrinsics::atomic_cxchg_acqrel_relaxed(dst, old, new),
|
(AcqRel, Relaxed) => intrinsics::atomic_cxchg_acqrel_relaxed(dst, old, new),
|
||||||
(AcqRel, Acquire) => intrinsics::atomic_cxchg_acqrel_acquire(dst, old, new),
|
(AcqRel, Acquire) => intrinsics::atomic_cxchg_acqrel_acquire(dst, old, new),
|
||||||
//(AcqRel, SeqCst) => intrinsics::atomic_cxchg_acqrel_seqcst(dst, old, new),
|
#[cfg(not(bootstrap))]
|
||||||
|
(AcqRel, SeqCst) => intrinsics::atomic_cxchg_acqrel_seqcst(dst, old, new),
|
||||||
(SeqCst, Relaxed) => intrinsics::atomic_cxchg_seqcst_relaxed(dst, old, new),
|
(SeqCst, Relaxed) => intrinsics::atomic_cxchg_seqcst_relaxed(dst, old, new),
|
||||||
(SeqCst, Acquire) => intrinsics::atomic_cxchg_seqcst_acquire(dst, old, new),
|
(SeqCst, Acquire) => intrinsics::atomic_cxchg_seqcst_acquire(dst, old, new),
|
||||||
(SeqCst, SeqCst) => intrinsics::atomic_cxchg_seqcst_seqcst(dst, old, new),
|
(SeqCst, SeqCst) => intrinsics::atomic_cxchg_seqcst_seqcst(dst, old, new),
|
||||||
(_, AcqRel) => panic!("there is no such thing as an acquire-release failure ordering"),
|
(_, AcqRel) => panic!("there is no such thing as an acquire-release failure ordering"),
|
||||||
(_, Release) => panic!("there is no such thing as a release failure ordering"),
|
(_, Release) => panic!("there is no such thing as a release failure ordering"),
|
||||||
|
#[cfg(bootstrap)]
|
||||||
_ => panic!("a failure ordering can't be stronger than a success ordering"),
|
_ => panic!("a failure ordering can't be stronger than a success ordering"),
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -3070,22 +3068,29 @@ unsafe fn atomic_compare_exchange_weak<T: Copy>(
|
|||||||
let (val, ok) = unsafe {
|
let (val, ok) = unsafe {
|
||||||
match (success, failure) {
|
match (success, failure) {
|
||||||
(Relaxed, Relaxed) => intrinsics::atomic_cxchgweak_relaxed_relaxed(dst, old, new),
|
(Relaxed, Relaxed) => intrinsics::atomic_cxchgweak_relaxed_relaxed(dst, old, new),
|
||||||
//(Relaxed, Acquire) => intrinsics::atomic_cxchgweak_relaxed_acquire(dst, old, new),
|
#[cfg(not(bootstrap))]
|
||||||
//(Relaxed, SeqCst) => intrinsics::atomic_cxchgweak_relaxed_seqcst(dst, old, new),
|
(Relaxed, Acquire) => intrinsics::atomic_cxchgweak_relaxed_acquire(dst, old, new),
|
||||||
|
#[cfg(not(bootstrap))]
|
||||||
|
(Relaxed, SeqCst) => intrinsics::atomic_cxchgweak_relaxed_seqcst(dst, old, new),
|
||||||
(Acquire, Relaxed) => intrinsics::atomic_cxchgweak_acquire_relaxed(dst, old, new),
|
(Acquire, Relaxed) => intrinsics::atomic_cxchgweak_acquire_relaxed(dst, old, new),
|
||||||
(Acquire, Acquire) => intrinsics::atomic_cxchgweak_acquire_acquire(dst, old, new),
|
(Acquire, Acquire) => intrinsics::atomic_cxchgweak_acquire_acquire(dst, old, new),
|
||||||
//(Acquire, SeqCst) => intrinsics::atomic_cxchgweak_acquire_seqcst(dst, old, new),
|
#[cfg(not(bootstrap))]
|
||||||
|
(Acquire, SeqCst) => intrinsics::atomic_cxchgweak_acquire_seqcst(dst, old, new),
|
||||||
(Release, Relaxed) => intrinsics::atomic_cxchgweak_release_relaxed(dst, old, new),
|
(Release, Relaxed) => intrinsics::atomic_cxchgweak_release_relaxed(dst, old, new),
|
||||||
//(Release, Acquire) => intrinsics::atomic_cxchgweak_release_acquire(dst, old, new),
|
#[cfg(not(bootstrap))]
|
||||||
//(Release, SeqCst) => intrinsics::atomic_cxchgweak_release_seqcst(dst, old, new),
|
(Release, Acquire) => intrinsics::atomic_cxchgweak_release_acquire(dst, old, new),
|
||||||
|
#[cfg(not(bootstrap))]
|
||||||
|
(Release, SeqCst) => intrinsics::atomic_cxchgweak_release_seqcst(dst, old, new),
|
||||||
(AcqRel, Relaxed) => intrinsics::atomic_cxchgweak_acqrel_relaxed(dst, old, new),
|
(AcqRel, Relaxed) => intrinsics::atomic_cxchgweak_acqrel_relaxed(dst, old, new),
|
||||||
(AcqRel, Acquire) => intrinsics::atomic_cxchgweak_acqrel_acquire(dst, old, new),
|
(AcqRel, Acquire) => intrinsics::atomic_cxchgweak_acqrel_acquire(dst, old, new),
|
||||||
//(AcqRel, SeqCst) => intrinsics::atomic_cxchgweak_acqrel_seqcst(dst, old, new),
|
#[cfg(not(bootstrap))]
|
||||||
|
(AcqRel, SeqCst) => intrinsics::atomic_cxchgweak_acqrel_seqcst(dst, old, new),
|
||||||
(SeqCst, Relaxed) => intrinsics::atomic_cxchgweak_seqcst_relaxed(dst, old, new),
|
(SeqCst, Relaxed) => intrinsics::atomic_cxchgweak_seqcst_relaxed(dst, old, new),
|
||||||
(SeqCst, Acquire) => intrinsics::atomic_cxchgweak_seqcst_acquire(dst, old, new),
|
(SeqCst, Acquire) => intrinsics::atomic_cxchgweak_seqcst_acquire(dst, old, new),
|
||||||
(SeqCst, SeqCst) => intrinsics::atomic_cxchgweak_seqcst_seqcst(dst, old, new),
|
(SeqCst, SeqCst) => intrinsics::atomic_cxchgweak_seqcst_seqcst(dst, old, new),
|
||||||
(_, AcqRel) => panic!("there is no such thing as an acquire-release failure ordering"),
|
(_, AcqRel) => panic!("there is no such thing as an acquire-release failure ordering"),
|
||||||
(_, Release) => panic!("there is no such thing as a release failure ordering"),
|
(_, Release) => panic!("there is no such thing as a release failure ordering"),
|
||||||
|
#[cfg(bootstrap)]
|
||||||
_ => panic!("a failure ordering can't be stronger than a success ordering"),
|
_ => panic!("a failure ordering can't be stronger than a success ordering"),
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -33,7 +33,7 @@ function createDirEntry(elem, parent, fullPath, hasFoundFile) {
|
|||||||
folders.className = "folders";
|
folders.className = "folders";
|
||||||
if (elem.dirs) {
|
if (elem.dirs) {
|
||||||
for (const dir of elem.dirs) {
|
for (const dir of elem.dirs) {
|
||||||
if (createDirEntry(dir, folders, fullPath, hasFoundFile)) {
|
if (createDirEntry(dir, folders, fullPath, false)) {
|
||||||
dirEntry.open = true;
|
dirEntry.open = true;
|
||||||
hasFoundFile = true;
|
hasFoundFile = true;
|
||||||
}
|
}
|
||||||
|
@ -16,15 +16,27 @@ click: (10, 10)
|
|||||||
wait-for: "html:not(.expanded)"
|
wait-for: "html:not(.expanded)"
|
||||||
assert: "nav.sidebar"
|
assert: "nav.sidebar"
|
||||||
|
|
||||||
|
// Checking that only the path to the current file is "open".
|
||||||
|
goto: file://|DOC_PATH|/src/lib2/another_folder/sub_mod/mod.rs.html
|
||||||
|
// First we expand the sidebar again.
|
||||||
|
click: (10, 10)
|
||||||
|
// We wait for the sidebar to be expanded.
|
||||||
|
wait-for-css: (".source-sidebar-expanded nav.sidebar", {"width": "300px"})
|
||||||
|
assert: "//*[@class='dir-entry' and @open]/*[text()='lib2']"
|
||||||
|
assert: "//*[@class='dir-entry' and @open]/*[text()='another_folder']"
|
||||||
|
assert: "//*[@class='dir-entry' and @open]/*[text()='sub_mod']"
|
||||||
|
// Only "another_folder" should be "open" in "lib2".
|
||||||
|
assert: "//*[@class='dir-entry' and not(@open)]/*[text()='another_mod']"
|
||||||
|
// All other trees should be collapsed.
|
||||||
|
assert-count: ("//*[@id='source-sidebar']/details[not(text()='lib2') and not(@open)]", 5)
|
||||||
|
|
||||||
// We now switch to mobile mode.
|
// We now switch to mobile mode.
|
||||||
size: (600, 600)
|
size: (600, 600)
|
||||||
// We check that the sidebar has the expected width (0).
|
wait-for-css: (".source-sidebar-expanded nav.sidebar", {"width": "600px"})
|
||||||
assert-css: ("nav.sidebar", {"width": "0px"})
|
|
||||||
// We expand the sidebar.
|
|
||||||
click: "#sidebar-toggle"
|
|
||||||
assert-css: (".source-sidebar-expanded nav.sidebar", {"width": "600px"})
|
|
||||||
// We collapse the sidebar.
|
// We collapse the sidebar.
|
||||||
click: (10, 10)
|
click: (10, 10)
|
||||||
|
// We check that the sidebar has the expected width (0).
|
||||||
|
assert-css: ("nav.sidebar", {"width": "0px"})
|
||||||
// We ensure that the class has been removed.
|
// We ensure that the class has been removed.
|
||||||
assert-false: ".source-sidebar-expanded"
|
assert-false: ".source-sidebar-expanded"
|
||||||
assert: "nav.sidebar"
|
assert: "nav.sidebar"
|
||||||
|
3
src/test/rustdoc-gui/src/lib2/another_folder/mod.rs
Normal file
3
src/test/rustdoc-gui/src/lib2/another_folder/mod.rs
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
pub fn another_fn() {}
|
||||||
|
|
||||||
|
pub mod sub_mod;
|
@ -0,0 +1 @@
|
|||||||
|
pub fn subsubsub() {}
|
1
src/test/rustdoc-gui/src/lib2/another_mod/mod.rs
Normal file
1
src/test/rustdoc-gui/src/lib2/another_mod/mod.rs
Normal file
@ -0,0 +1 @@
|
|||||||
|
pub fn tadam() {}
|
@ -2,6 +2,9 @@
|
|||||||
|
|
||||||
#![feature(doc_cfg)]
|
#![feature(doc_cfg)]
|
||||||
|
|
||||||
|
pub mod another_folder;
|
||||||
|
pub mod another_mod;
|
||||||
|
|
||||||
pub mod module {
|
pub mod module {
|
||||||
pub mod sub_module {
|
pub mod sub_module {
|
||||||
pub mod sub_sub_module {
|
pub mod sub_sub_module {
|
||||||
|
13
src/test/ui/codemap_tests/unicode.expanded.stdout
Normal file
13
src/test/ui/codemap_tests/unicode.expanded.stdout
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#![feature(prelude_import)]
|
||||||
|
#![no_std]
|
||||||
|
#[prelude_import]
|
||||||
|
use ::std::prelude::rust_2015::*;
|
||||||
|
#[macro_use]
|
||||||
|
extern crate std;
|
||||||
|
// revisions: normal expanded
|
||||||
|
//[expanded] check-pass
|
||||||
|
//[expanded]compile-flags: -Zunpretty=expanded
|
||||||
|
|
||||||
|
extern "路濫狼á́́" fn foo() {}
|
||||||
|
|
||||||
|
fn main() {}
|
@ -1,5 +1,5 @@
|
|||||||
error[E0703]: invalid ABI: found `路濫狼á́́`
|
error[E0703]: invalid ABI: found `路濫狼á́́`
|
||||||
--> $DIR/unicode.rs:1:8
|
--> $DIR/unicode.rs:5:8
|
||||||
|
|
|
|
||||||
LL | extern "路濫狼á́́" fn foo() {}
|
LL | extern "路濫狼á́́" fn foo() {}
|
||||||
| ^^^^^^^^^ invalid ABI
|
| ^^^^^^^^^ invalid ABI
|
@ -1,3 +1,7 @@
|
|||||||
extern "路濫狼á́́" fn foo() {} //~ ERROR invalid ABI
|
// revisions: normal expanded
|
||||||
|
//[expanded] check-pass
|
||||||
|
//[expanded]compile-flags: -Zunpretty=expanded
|
||||||
|
|
||||||
|
extern "路濫狼á́́" fn foo() {} //[normal]~ ERROR invalid ABI
|
||||||
|
|
||||||
fn main() { }
|
fn main() { }
|
||||||
|
@ -12,10 +12,10 @@ enum E {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let e2 = Empty2(); //~ ERROR expected function, found `Empty2`
|
let e2 = Empty2(); //~ ERROR expected function, found struct `Empty2`
|
||||||
let e4 = E::Empty4();
|
let e4 = E::Empty4();
|
||||||
//~^ ERROR expected function, found enum variant `E::Empty4` [E0618]
|
//~^ ERROR expected function, found enum variant `E::Empty4` [E0618]
|
||||||
let xe2 = XEmpty2(); //~ ERROR expected function, found `empty_struct::XEmpty2`
|
let xe2 = XEmpty2(); //~ ERROR expected function, found struct `XEmpty2`
|
||||||
let xe4 = XE::XEmpty4();
|
let xe4 = XE::XEmpty4();
|
||||||
//~^ ERROR expected function, found enum variant `XE::XEmpty4` [E0618]
|
//~^ ERROR expected function, found enum variant `XE::XEmpty4` [E0618]
|
||||||
}
|
}
|
||||||
|
@ -1,38 +1,50 @@
|
|||||||
error[E0618]: expected function, found `Empty2`
|
error[E0618]: expected function, found struct `Empty2`
|
||||||
--> $DIR/empty-struct-unit-expr.rs:15:14
|
--> $DIR/empty-struct-unit-expr.rs:15:14
|
||||||
|
|
|
|
||||||
LL | struct Empty2;
|
LL | struct Empty2;
|
||||||
| ------------- `Empty2` defined here
|
| ------------- struct `Empty2` defined here
|
||||||
...
|
...
|
||||||
LL | let e2 = Empty2();
|
LL | let e2 = Empty2();
|
||||||
| ^^^^^^--
|
| ^^^^^^--
|
||||||
| |
|
| |
|
||||||
| call expression requires function
|
| call expression requires function
|
||||||
|
|
|
||||||
|
help: `Empty2` is a unit struct, and does not take parentheses to be constructed
|
||||||
|
|
|
||||||
|
LL - let e2 = Empty2();
|
||||||
|
LL + let e2 = Empty2;
|
||||||
|
|
|
||||||
|
|
||||||
error[E0618]: expected function, found enum variant `E::Empty4`
|
error[E0618]: expected function, found enum variant `E::Empty4`
|
||||||
--> $DIR/empty-struct-unit-expr.rs:16:14
|
--> $DIR/empty-struct-unit-expr.rs:16:14
|
||||||
|
|
|
|
||||||
LL | Empty4
|
LL | Empty4
|
||||||
| ------ `E::Empty4` defined here
|
| ------ enum variant `E::Empty4` defined here
|
||||||
...
|
...
|
||||||
LL | let e4 = E::Empty4();
|
LL | let e4 = E::Empty4();
|
||||||
| ^^^^^^^^^--
|
| ^^^^^^^^^--
|
||||||
| |
|
| |
|
||||||
| call expression requires function
|
| call expression requires function
|
||||||
|
|
|
|
||||||
help: `E::Empty4` is a unit variant, you need to write it without the parentheses
|
help: `E::Empty4` is a unit enum variant, and does not take parentheses to be constructed
|
||||||
|
|
|
|
||||||
LL - let e4 = E::Empty4();
|
LL - let e4 = E::Empty4();
|
||||||
LL + let e4 = E::Empty4;
|
LL + let e4 = E::Empty4;
|
||||||
|
|
|
|
||||||
|
|
||||||
error[E0618]: expected function, found `empty_struct::XEmpty2`
|
error[E0618]: expected function, found struct `XEmpty2`
|
||||||
--> $DIR/empty-struct-unit-expr.rs:18:15
|
--> $DIR/empty-struct-unit-expr.rs:18:15
|
||||||
|
|
|
|
||||||
LL | let xe2 = XEmpty2();
|
LL | let xe2 = XEmpty2();
|
||||||
| ^^^^^^^--
|
| ^^^^^^^--
|
||||||
| |
|
| |
|
||||||
| call expression requires function
|
| call expression requires function
|
||||||
|
|
|
||||||
|
help: `XEmpty2` is a unit struct, and does not take parentheses to be constructed
|
||||||
|
|
|
||||||
|
LL - let xe2 = XEmpty2();
|
||||||
|
LL + let xe2 = XEmpty2;
|
||||||
|
|
|
||||||
|
|
||||||
error[E0618]: expected function, found enum variant `XE::XEmpty4`
|
error[E0618]: expected function, found enum variant `XE::XEmpty4`
|
||||||
--> $DIR/empty-struct-unit-expr.rs:19:15
|
--> $DIR/empty-struct-unit-expr.rs:19:15
|
||||||
@ -42,7 +54,7 @@ LL | let xe4 = XE::XEmpty4();
|
|||||||
| |
|
| |
|
||||||
| call expression requires function
|
| call expression requires function
|
||||||
|
|
|
|
||||||
help: `XE::XEmpty4` is a unit variant, you need to write it without the parentheses
|
help: `XE::XEmpty4` is a unit enum variant, and does not take parentheses to be constructed
|
||||||
|
|
|
|
||||||
LL - let xe4 = XE::XEmpty4();
|
LL - let xe4 = XE::XEmpty4();
|
||||||
LL + let xe4 = XE::XEmpty4;
|
LL + let xe4 = XE::XEmpty4;
|
||||||
|
@ -2,14 +2,14 @@ error[E0618]: expected function, found enum variant `X::Entry`
|
|||||||
--> $DIR/E0618.rs:6:5
|
--> $DIR/E0618.rs:6:5
|
||||||
|
|
|
|
||||||
LL | Entry,
|
LL | Entry,
|
||||||
| ----- `X::Entry` defined here
|
| ----- enum variant `X::Entry` defined here
|
||||||
...
|
...
|
||||||
LL | X::Entry();
|
LL | X::Entry();
|
||||||
| ^^^^^^^^--
|
| ^^^^^^^^--
|
||||||
| |
|
| |
|
||||||
| call expression requires function
|
| call expression requires function
|
||||||
|
|
|
|
||||||
help: `X::Entry` is a unit variant, you need to write it without the parentheses
|
help: `X::Entry` is a unit enum variant, and does not take parentheses to be constructed
|
||||||
|
|
|
|
||||||
LL - X::Entry();
|
LL - X::Entry();
|
||||||
LL + X::Entry;
|
LL + X::Entry;
|
||||||
|
@ -0,0 +1,26 @@
|
|||||||
|
#![feature(type_alias_impl_trait)]
|
||||||
|
|
||||||
|
struct Concrete;
|
||||||
|
|
||||||
|
type Tait = impl Sized;
|
||||||
|
|
||||||
|
impl Foo for Concrete {
|
||||||
|
type Item = Concrete;
|
||||||
|
//~^ mismatched types
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Bar for Concrete {
|
||||||
|
type Other = Tait;
|
||||||
|
}
|
||||||
|
|
||||||
|
trait Foo {
|
||||||
|
type Item: Bar<Other = Self>;
|
||||||
|
}
|
||||||
|
|
||||||
|
trait Bar {
|
||||||
|
type Other;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn tait() -> Tait {}
|
||||||
|
|
||||||
|
fn main() {}
|
@ -0,0 +1,15 @@
|
|||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/issue-99348-impl-compatibility.rs:8:17
|
||||||
|
|
|
||||||
|
LL | type Tait = impl Sized;
|
||||||
|
| ---------- the expected opaque type
|
||||||
|
...
|
||||||
|
LL | type Item = Concrete;
|
||||||
|
| ^^^^^^^^ types differ
|
||||||
|
|
|
||||||
|
= note: expected opaque type `Tait`
|
||||||
|
found struct `Concrete`
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0308`.
|
@ -1,5 +1,5 @@
|
|||||||
struct G;
|
struct G;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let g = G(); //~ ERROR: expected function, found `G`
|
let g = G(); //~ ERROR: expected function, found struct `G`
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,19 @@
|
|||||||
error[E0618]: expected function, found `G`
|
error[E0618]: expected function, found struct `G`
|
||||||
--> $DIR/issue-20714.rs:4:13
|
--> $DIR/issue-20714.rs:4:13
|
||||||
|
|
|
|
||||||
LL | struct G;
|
LL | struct G;
|
||||||
| -------- `G` defined here
|
| -------- struct `G` defined here
|
||||||
...
|
...
|
||||||
LL | let g = G();
|
LL | let g = G();
|
||||||
| ^--
|
| ^--
|
||||||
| |
|
| |
|
||||||
| call expression requires function
|
| call expression requires function
|
||||||
|
|
|
||||||
|
help: `G` is a unit struct, and does not take parentheses to be constructed
|
||||||
|
|
|
||||||
|
LL - let g = G();
|
||||||
|
LL + let g = G;
|
||||||
|
|
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ struct Bar;
|
|||||||
|
|
||||||
pub fn some_func() {
|
pub fn some_func() {
|
||||||
let f = Bar();
|
let f = Bar();
|
||||||
//~^ ERROR: expected function, found `Bar`
|
//~^ ERROR: expected function, found struct `Bar`
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -8,16 +8,22 @@ LL | let y = t();
|
|||||||
| |
|
| |
|
||||||
| call expression requires function
|
| call expression requires function
|
||||||
|
|
||||||
error[E0618]: expected function, found `Bar`
|
error[E0618]: expected function, found struct `Bar`
|
||||||
--> $DIR/issue-21701.rs:9:13
|
--> $DIR/issue-21701.rs:9:13
|
||||||
|
|
|
|
||||||
LL | struct Bar;
|
LL | struct Bar;
|
||||||
| ---------- `Bar` defined here
|
| ---------- struct `Bar` defined here
|
||||||
...
|
...
|
||||||
LL | let f = Bar();
|
LL | let f = Bar();
|
||||||
| ^^^--
|
| ^^^--
|
||||||
| |
|
| |
|
||||||
| call expression requires function
|
| call expression requires function
|
||||||
|
|
|
||||||
|
help: `Bar` is a unit struct, and does not take parentheses to be constructed
|
||||||
|
|
|
||||||
|
LL - let f = Bar();
|
||||||
|
LL + let f = Bar;
|
||||||
|
|
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
@ -4,13 +4,13 @@ error[E0533]: expected unit struct, unit variant or constant, found associated f
|
|||||||
LL | Foo::bar => {}
|
LL | Foo::bar => {}
|
||||||
| ^^^^^^^^
|
| ^^^^^^^^
|
||||||
|
|
||||||
error[E0533]: expected unit struct, unit variant or constant, found associated function `<Foo>::bar`
|
error[E0533]: expected unit struct, unit variant or constant, found associated function `Foo::bar`
|
||||||
--> $DIR/method-path-in-pattern.rs:19:9
|
--> $DIR/method-path-in-pattern.rs:19:9
|
||||||
|
|
|
|
||||||
LL | <Foo>::bar => {}
|
LL | <Foo>::bar => {}
|
||||||
| ^^^^^^^^^^
|
| ^^^^^^^^^^
|
||||||
|
|
||||||
error[E0533]: expected unit struct, unit variant or constant, found associated function `<Foo>::trait_bar`
|
error[E0533]: expected unit struct, unit variant or constant, found associated function `Foo::trait_bar`
|
||||||
--> $DIR/method-path-in-pattern.rs:23:9
|
--> $DIR/method-path-in-pattern.rs:23:9
|
||||||
|
|
|
|
||||||
LL | <Foo>::trait_bar => {}
|
LL | <Foo>::trait_bar => {}
|
||||||
@ -22,7 +22,7 @@ error[E0533]: expected unit struct, unit variant or constant, found associated f
|
|||||||
LL | if let Foo::bar = 0u32 {}
|
LL | if let Foo::bar = 0u32 {}
|
||||||
| ^^^^^^^^
|
| ^^^^^^^^
|
||||||
|
|
||||||
error[E0533]: expected unit struct, unit variant or constant, found associated function `<Foo>::bar`
|
error[E0533]: expected unit struct, unit variant or constant, found associated function `Foo::bar`
|
||||||
--> $DIR/method-path-in-pattern.rs:28:12
|
--> $DIR/method-path-in-pattern.rs:28:12
|
||||||
|
|
|
|
||||||
LL | if let <Foo>::bar = 0u32 {}
|
LL | if let <Foo>::bar = 0u32 {}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
error[E0533]: expected unit struct, unit variant or constant, found associated function `<S as Tr>::A::f::<u8>`
|
error[E0533]: expected unit struct, unit variant or constant, found associated function `<<S as Tr>::A>::f<u8>`
|
||||||
--> $DIR/qualified-path-params.rs:20:9
|
--> $DIR/qualified-path-params.rs:20:9
|
||||||
|
|
|
|
||||||
LL | <S as Tr>::A::f::<u8> => {}
|
LL | <S as Tr>::A::f::<u8> => {}
|
||||||
|
@ -336,14 +336,14 @@ error[E0618]: expected function, found enum variant `Z::Unit`
|
|||||||
--> $DIR/privacy-enum-ctor.rs:31:17
|
--> $DIR/privacy-enum-ctor.rs:31:17
|
||||||
|
|
|
|
||||||
LL | Unit,
|
LL | Unit,
|
||||||
| ---- `Z::Unit` defined here
|
| ---- enum variant `Z::Unit` defined here
|
||||||
...
|
...
|
||||||
LL | let _ = Z::Unit();
|
LL | let _ = Z::Unit();
|
||||||
| ^^^^^^^--
|
| ^^^^^^^--
|
||||||
| |
|
| |
|
||||||
| call expression requires function
|
| call expression requires function
|
||||||
|
|
|
|
||||||
help: `Z::Unit` is a unit variant, you need to write it without the parentheses
|
help: `Z::Unit` is a unit enum variant, and does not take parentheses to be constructed
|
||||||
|
|
|
|
||||||
LL - let _ = Z::Unit();
|
LL - let _ = Z::Unit();
|
||||||
LL + let _ = Z::Unit;
|
LL + let _ = Z::Unit;
|
||||||
@ -371,14 +371,14 @@ error[E0618]: expected function, found enum variant `m::E::Unit`
|
|||||||
--> $DIR/privacy-enum-ctor.rs:47:16
|
--> $DIR/privacy-enum-ctor.rs:47:16
|
||||||
|
|
|
|
||||||
LL | Unit,
|
LL | Unit,
|
||||||
| ---- `m::E::Unit` defined here
|
| ---- enum variant `m::E::Unit` defined here
|
||||||
...
|
...
|
||||||
LL | let _: E = m::E::Unit();
|
LL | let _: E = m::E::Unit();
|
||||||
| ^^^^^^^^^^--
|
| ^^^^^^^^^^--
|
||||||
| |
|
| |
|
||||||
| call expression requires function
|
| call expression requires function
|
||||||
|
|
|
|
||||||
help: `m::E::Unit` is a unit variant, you need to write it without the parentheses
|
help: `m::E::Unit` is a unit enum variant, and does not take parentheses to be constructed
|
||||||
|
|
|
|
||||||
LL - let _: E = m::E::Unit();
|
LL - let _: E = m::E::Unit();
|
||||||
LL + let _: E = m::E::Unit;
|
LL + let _: E = m::E::Unit;
|
||||||
@ -406,14 +406,14 @@ error[E0618]: expected function, found enum variant `E::Unit`
|
|||||||
--> $DIR/privacy-enum-ctor.rs:55:16
|
--> $DIR/privacy-enum-ctor.rs:55:16
|
||||||
|
|
|
|
||||||
LL | Unit,
|
LL | Unit,
|
||||||
| ---- `E::Unit` defined here
|
| ---- enum variant `E::Unit` defined here
|
||||||
...
|
...
|
||||||
LL | let _: E = E::Unit();
|
LL | let _: E = E::Unit();
|
||||||
| ^^^^^^^--
|
| ^^^^^^^--
|
||||||
| |
|
| |
|
||||||
| call expression requires function
|
| call expression requires function
|
||||||
|
|
|
|
||||||
help: `E::Unit` is a unit variant, you need to write it without the parentheses
|
help: `E::Unit` is a unit enum variant, and does not take parentheses to be constructed
|
||||||
|
|
|
|
||||||
LL - let _: E = E::Unit();
|
LL - let _: E = E::Unit();
|
||||||
LL + let _: E = E::Unit;
|
LL + let _: E = E::Unit;
|
||||||
|
10
src/test/ui/suggestions/issue-99240-2.rs
Normal file
10
src/test/ui/suggestions/issue-99240-2.rs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
enum Enum {
|
||||||
|
Unit,
|
||||||
|
}
|
||||||
|
type Alias = Enum;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
Alias::
|
||||||
|
Unit();
|
||||||
|
//~^^ ERROR expected function, found enum variant `Alias::Unit`
|
||||||
|
}
|
24
src/test/ui/suggestions/issue-99240-2.stderr
Normal file
24
src/test/ui/suggestions/issue-99240-2.stderr
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
error[E0618]: expected function, found enum variant `Alias::Unit`
|
||||||
|
--> $DIR/issue-99240-2.rs:7:5
|
||||||
|
|
|
||||||
|
LL | Unit,
|
||||||
|
| ---- enum variant `Alias::Unit` defined here
|
||||||
|
...
|
||||||
|
LL | Alias::
|
||||||
|
| _____^
|
||||||
|
| |_____|
|
||||||
|
| ||
|
||||||
|
LL | || Unit();
|
||||||
|
| ||________^_- call expression requires function
|
||||||
|
| |_________|
|
||||||
|
|
|
||||||
|
|
|
||||||
|
help: `Alias::Unit` is a unit enum variant, and does not take parentheses to be constructed
|
||||||
|
|
|
||||||
|
LL - Unit();
|
||||||
|
LL + Unit;
|
||||||
|
|
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0618`.
|
6
src/test/ui/suggestions/issue-99240.rs
Normal file
6
src/test/ui/suggestions/issue-99240.rs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
fn fmt(it: &(std::cell::Cell<Option<impl FnOnce()>>,)) {
|
||||||
|
(it.0.take())()
|
||||||
|
//~^ ERROR expected function
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
11
src/test/ui/suggestions/issue-99240.stderr
Normal file
11
src/test/ui/suggestions/issue-99240.stderr
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
error[E0618]: expected function, found `Option<impl FnOnce()>`
|
||||||
|
--> $DIR/issue-99240.rs:2:5
|
||||||
|
|
|
||||||
|
LL | (it.0.take())()
|
||||||
|
| ^^^^^^^^^^^^^--
|
||||||
|
| |
|
||||||
|
| call expression requires function
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0618`.
|
@ -20,14 +20,14 @@ error[E0618]: expected function, found enum variant `Alias::Unit`
|
|||||||
--> $DIR/incorrect-variant-form-through-alias-caught.rs:15:5
|
--> $DIR/incorrect-variant-form-through-alias-caught.rs:15:5
|
||||||
|
|
|
|
||||||
LL | enum Enum { Braced {}, Unit, Tuple() }
|
LL | enum Enum { Braced {}, Unit, Tuple() }
|
||||||
| ---- `Alias::Unit` defined here
|
| ---- enum variant `Alias::Unit` defined here
|
||||||
...
|
...
|
||||||
LL | Alias::Unit();
|
LL | Alias::Unit();
|
||||||
| ^^^^^^^^^^^--
|
| ^^^^^^^^^^^--
|
||||||
| |
|
| |
|
||||||
| call expression requires function
|
| call expression requires function
|
||||||
|
|
|
|
||||||
help: `Alias::Unit` is a unit variant, you need to write it without the parentheses
|
help: `Alias::Unit` is a unit enum variant, and does not take parentheses to be constructed
|
||||||
|
|
|
|
||||||
LL - Alias::Unit();
|
LL - Alias::Unit();
|
||||||
LL + Alias::Unit;
|
LL + Alias::Unit;
|
||||||
|
Loading…
Reference in New Issue
Block a user