mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-29 20:46:07 +03:00
Auto merge of #114821 - matthiaskrgr:rollup-bahtz9m, r=matthiaskrgr
Rollup of 5 pull requests Successful merges: - #114745 (Make Const more useful in smir) - #114752 (fixed *const [type error] does not implement the Copy trait) - #114760 (DebugInfo: Updates test cases that add method declarations.) - #114815 (Update books) - #114817 (Remove unnecessary FIXME) r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
@@ -68,7 +68,7 @@ fn check_asm_operand_type(
|
||||
let asm_ty = match *ty.kind() {
|
||||
// `!` is allowed for input but not for output (issue #87802)
|
||||
ty::Never if is_input => return None,
|
||||
ty::Error(_) => return None,
|
||||
_ if ty.references_error() => return None,
|
||||
ty::Int(IntTy::I8) | ty::Uint(UintTy::U8) => Some(InlineAsmType::I8),
|
||||
ty::Int(IntTy::I16) | ty::Uint(UintTy::U16) => Some(InlineAsmType::I16),
|
||||
ty::Int(IntTy::I32) | ty::Uint(UintTy::U32) => Some(InlineAsmType::I32),
|
||||
|
||||
@@ -445,7 +445,6 @@ fn make_mirror_unadjusted(&mut self, expr: &'tcx hir::Expr<'tcx>) -> Expr<'tcx>
|
||||
let rhs = self.mirror_expr(rhs);
|
||||
self.overloaded_operator(expr, Box::new([lhs, rhs]))
|
||||
} else {
|
||||
// FIXME overflow
|
||||
match op.node {
|
||||
hir::BinOpKind::And => ExprKind::LogicalOp {
|
||||
op: LogicalOp::And,
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
use crate::rustc_internal::{self, opaque};
|
||||
use crate::stable_mir::mir::{CopyNonOverlapping, UserTypeProjection, VariantIdx};
|
||||
use crate::stable_mir::ty::{
|
||||
allocation_filter, new_allocation, FloatTy, IntTy, Movability, RigidTy, TyKind, UintTy,
|
||||
allocation_filter, new_allocation, Const, FloatTy, IntTy, Movability, RigidTy, TyKind, UintTy,
|
||||
};
|
||||
use crate::stable_mir::{self, Context};
|
||||
use rustc_hir as hir;
|
||||
@@ -187,7 +187,11 @@ fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T {
|
||||
use mir::Rvalue::*;
|
||||
match self {
|
||||
Use(op) => stable_mir::mir::Rvalue::Use(op.stable(tables)),
|
||||
Repeat(op, len) => stable_mir::mir::Rvalue::Repeat(op.stable(tables), opaque(len)),
|
||||
Repeat(op, len) => {
|
||||
let cnst = ConstantKind::from_const(*len, tables.tcx);
|
||||
let len = Const { literal: cnst.stable(tables) };
|
||||
stable_mir::mir::Rvalue::Repeat(op.stable(tables), len)
|
||||
}
|
||||
Ref(region, kind, place) => stable_mir::mir::Rvalue::Ref(
|
||||
opaque(region),
|
||||
kind.stable(tables),
|
||||
@@ -372,7 +376,11 @@ fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T {
|
||||
use stable_mir::ty::TermKind;
|
||||
match self {
|
||||
ty::TermKind::Ty(ty) => TermKind::Type(tables.intern_ty(*ty)),
|
||||
ty::TermKind::Const(const_) => TermKind::Const(opaque(const_)),
|
||||
ty::TermKind::Const(cnst) => {
|
||||
let cnst = ConstantKind::from_const(*cnst, tables.tcx);
|
||||
let cnst = Const { literal: cnst.stable(tables) };
|
||||
TermKind::Const(cnst)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -829,7 +837,10 @@ fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T {
|
||||
match self {
|
||||
ty::GenericArgKind::Lifetime(region) => GenericArgKind::Lifetime(opaque(region)),
|
||||
ty::GenericArgKind::Type(ty) => GenericArgKind::Type(tables.intern_ty(*ty)),
|
||||
ty::GenericArgKind::Const(const_) => GenericArgKind::Const(opaque(&const_)),
|
||||
ty::GenericArgKind::Const(cnst) => {
|
||||
let cnst = ConstantKind::from_const(*cnst, tables.tcx);
|
||||
GenericArgKind::Const(stable_mir::ty::Const { literal: cnst.stable(tables) })
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1035,7 +1046,9 @@ fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T {
|
||||
}
|
||||
ty::Str => TyKind::RigidTy(RigidTy::Str),
|
||||
ty::Array(ty, constant) => {
|
||||
TyKind::RigidTy(RigidTy::Array(tables.intern_ty(*ty), opaque(constant)))
|
||||
let cnst = ConstantKind::from_const(*constant, tables.tcx);
|
||||
let cnst = stable_mir::ty::Const { literal: cnst.stable(tables) };
|
||||
TyKind::RigidTy(RigidTy::Array(tables.intern_ty(*ty), cnst))
|
||||
}
|
||||
ty::Slice(ty) => TyKind::RigidTy(RigidTy::Slice(tables.intern_ty(*ty))),
|
||||
ty::RawPtr(ty::TypeAndMut { ty, mutbl }) => {
|
||||
|
||||
@@ -15,7 +15,11 @@ pub fn kind(&self) -> TyKind {
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) type Const = Opaque;
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Const {
|
||||
pub literal: ConstantKind,
|
||||
}
|
||||
|
||||
type Ident = Opaque;
|
||||
pub(crate) type Region = Opaque;
|
||||
type Span = Opaque;
|
||||
|
||||
+1
-1
Submodule src/doc/book updated: 668c64760b...72187f5cd0
+1
-1
Submodule src/doc/embedded-book updated: 1e5556dd1b...99ad2847b8
+1
-1
Submodule src/doc/nomicon updated: 302b995bcb...388750b081
+1
-1
Submodule src/doc/reference updated: 9cd5c5a6cc...d43038932a
+1
-1
Submodule src/doc/rustc-dev-guide updated: 24eebb6df9...b123ab4754
@@ -0,0 +1,26 @@
|
||||
// compile-flags: -g -Cno-prepopulate-passes
|
||||
|
||||
// Verify that we added a declaration for a method.
|
||||
|
||||
// CHECK: define{{.*}}@method{{.*}} !dbg ![[METHOD_DEF_DBG:[0-9]+]]
|
||||
// CHECK: define{{.*}}@function{{.*}} !dbg ![[FUNC_DEF_DBG:[0-9]+]]
|
||||
|
||||
#![crate_type = "lib"]
|
||||
|
||||
// CHECK-DAG: ![[FOO_DBG:[0-9]+]] = !DICompositeType(tag: {{.*}} name: "Foo", {{.*}} identifier:
|
||||
pub struct Foo;
|
||||
|
||||
impl Foo {
|
||||
// CHECK-DAG: ![[METHOD_DEF_DBG]] = distinct !DISubprogram(name: "method"{{.*}}, scope: ![[FOO_DBG]]{{.*}}DISPFlagDefinition{{.*}}, declaration: ![[METHOD_DECL_DBG:[0-9]+]]
|
||||
// CHECK-DAG: ![[METHOD_DECL_DBG]] = !DISubprogram(name: "method"{{.*}}, scope: ![[FOO_DBG]]
|
||||
#[no_mangle]
|
||||
pub fn method() {}
|
||||
}
|
||||
|
||||
// CHECK: ![[FUNC_DEF_DBG]] = distinct !DISubprogram(name: "function"
|
||||
// CHECK-NOT: declaration
|
||||
// CHECK-SAME: DISPFlagDefinition
|
||||
// CHECK-NOT: declaration
|
||||
// CHECK-SAME: )
|
||||
#[no_mangle]
|
||||
pub fn function() {}
|
||||
@@ -0,0 +1,7 @@
|
||||
// test that "error: arguments for inline assembly must be copyable" doesn't show up in this code
|
||||
// needs-asm-support
|
||||
// only-x86_64
|
||||
fn main() {
|
||||
let peb: *const PEB; //~ ERROR cannot find type `PEB` in this scope [E0412]
|
||||
unsafe { std::arch::asm!("mov {0}, fs:[0x30]", out(reg) peb); }
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
error[E0412]: cannot find type `PEB` in this scope
|
||||
--> $DIR/issue-113788.rs:5:21
|
||||
|
|
||||
LL | let peb: *const PEB;
|
||||
| ^^^ not found in this scope
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0412`.
|
||||
Reference in New Issue
Block a user