Auto merge of #98730 - matthiaskrgr:rollup-2c4d4x5, r=matthiaskrgr
Rollup of 10 pull requests Successful merges: - #97629 ([core] add `Exclusive` to sync) - #98503 (fix data race in thread::scope) - #98670 (llvm-wrapper: adapt for LLVMConstExtractValue removal) - #98671 (Fix source sidebar bugs) - #98677 (For diagnostic information of Boolean, remind it as use the type: 'bool') - #98684 (add test for 72793) - #98688 (interpret: add From<&MplaceTy> for PlaceTy) - #98695 (use "or pattern") - #98709 (Remove unneeded methods declaration for old web browsers) - #98717 (get rid of tidy 'unnecessarily ignored' warnings) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
ca1e68b322
26 changed files with 364 additions and 79 deletions
|
@ -109,8 +109,7 @@ impl<'ll> CodegenCx<'ll, '_> {
|
|||
pub fn const_get_elt(&self, v: &'ll Value, idx: u64) -> &'ll Value {
|
||||
unsafe {
|
||||
assert_eq!(idx as c_uint as u64, idx);
|
||||
let us = &[idx as c_uint];
|
||||
let r = llvm::LLVMConstExtractValue(v, us.as_ptr(), us.len() as c_uint);
|
||||
let r = llvm::LLVMGetAggregateElement(v, idx as c_uint).unwrap();
|
||||
|
||||
debug!("const_get_elt(v={:?}, idx={}, r={:?})", v, idx, r);
|
||||
|
||||
|
|
|
@ -1134,11 +1134,7 @@ extern "C" {
|
|||
pub fn LLVMConstIntToPtr<'a>(ConstantVal: &'a Value, ToType: &'a Type) -> &'a Value;
|
||||
pub fn LLVMConstBitCast<'a>(ConstantVal: &'a Value, ToType: &'a Type) -> &'a Value;
|
||||
pub fn LLVMConstPointerCast<'a>(ConstantVal: &'a Value, ToType: &'a Type) -> &'a Value;
|
||||
pub fn LLVMConstExtractValue(
|
||||
AggConstant: &Value,
|
||||
IdxList: *const c_uint,
|
||||
NumIdx: c_uint,
|
||||
) -> &Value;
|
||||
pub fn LLVMGetAggregateElement(ConstantVal: &Value, Idx: c_uint) -> Option<&Value>;
|
||||
|
||||
// Operations on global variables, functions, and aliases (globals)
|
||||
pub fn LLVMIsDeclaration(Global: &Value) -> Bool;
|
||||
|
|
|
@ -346,7 +346,7 @@ fn valtree_into_mplace<'tcx>(
|
|||
ty::FnDef(_, _) => {
|
||||
ecx.write_immediate(
|
||||
Immediate::Scalar(ScalarMaybeUninit::Scalar(Scalar::ZST)),
|
||||
&(*place).into(),
|
||||
&place.into(),
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
|
@ -355,7 +355,7 @@ fn valtree_into_mplace<'tcx>(
|
|||
debug!("writing trivial valtree {:?} to place {:?}", scalar_int, place);
|
||||
ecx.write_immediate(
|
||||
Immediate::Scalar(ScalarMaybeUninit::Scalar(scalar_int.into())),
|
||||
&(*place).into(),
|
||||
&place.into(),
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
|
@ -382,7 +382,7 @@ fn valtree_into_mplace<'tcx>(
|
|||
};
|
||||
debug!(?imm);
|
||||
|
||||
ecx.write_immediate(imm, &(*place).into()).unwrap();
|
||||
ecx.write_immediate(imm, &place.into()).unwrap();
|
||||
}
|
||||
ty::Adt(_, _) | ty::Tuple(_) | ty::Array(_, _) | ty::Str | ty::Slice(_) => {
|
||||
let branches = valtree.unwrap_branch();
|
||||
|
@ -464,11 +464,11 @@ fn valtree_into_mplace<'tcx>(
|
|||
|
||||
if let Some(variant_idx) = variant_idx {
|
||||
// don't forget filling the place with the discriminant of the enum
|
||||
ecx.write_discriminant(variant_idx, &(*place).into()).unwrap();
|
||||
ecx.write_discriminant(variant_idx, &place.into()).unwrap();
|
||||
}
|
||||
|
||||
debug!("dump of place after writing discriminant:");
|
||||
dump_place(ecx, (*place).into());
|
||||
dump_place(ecx, place.into());
|
||||
}
|
||||
_ => bug!("shouldn't have created a ValTree for {:?}", ty),
|
||||
}
|
||||
|
|
|
@ -195,7 +195,7 @@ impl<'rt, 'mir, 'tcx: 'mir, M: CompileTimeMachine<'mir, 'tcx, const_eval::Memory
|
|||
let tcx = self.ecx.tcx;
|
||||
let ty = mplace.layout.ty;
|
||||
if let ty::Ref(_, referenced_ty, ref_mutability) = *ty.kind() {
|
||||
let value = self.ecx.read_immediate(&(*mplace).into())?;
|
||||
let value = self.ecx.read_immediate(&mplace.into())?;
|
||||
let mplace = self.ecx.ref_to_mplace(&value)?;
|
||||
assert_eq!(mplace.layout.ty, referenced_ty);
|
||||
// Handle trait object vtables.
|
||||
|
|
|
@ -204,6 +204,13 @@ impl<'tcx, Tag: Provenance> From<&'_ MPlaceTy<'tcx, Tag>> for OpTy<'tcx, Tag> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'tcx, Tag: Provenance> From<&'_ mut MPlaceTy<'tcx, Tag>> for OpTy<'tcx, Tag> {
|
||||
#[inline(always)]
|
||||
fn from(mplace: &mut MPlaceTy<'tcx, Tag>) -> Self {
|
||||
OpTy { op: Operand::Indirect(**mplace), layout: mplace.layout }
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx, Tag: Provenance> From<ImmTy<'tcx, Tag>> for OpTy<'tcx, Tag> {
|
||||
#[inline(always)]
|
||||
fn from(val: ImmTy<'tcx, Tag>) -> Self {
|
||||
|
|
|
@ -118,7 +118,21 @@ impl<'tcx, Tag: Provenance> std::ops::Deref for MPlaceTy<'tcx, Tag> {
|
|||
impl<'tcx, Tag: Provenance> From<MPlaceTy<'tcx, Tag>> for PlaceTy<'tcx, Tag> {
|
||||
#[inline(always)]
|
||||
fn from(mplace: MPlaceTy<'tcx, Tag>) -> Self {
|
||||
PlaceTy { place: Place::Ptr(mplace.mplace), layout: mplace.layout }
|
||||
PlaceTy { place: Place::Ptr(*mplace), layout: mplace.layout }
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx, Tag: Provenance> From<&'_ MPlaceTy<'tcx, Tag>> for PlaceTy<'tcx, Tag> {
|
||||
#[inline(always)]
|
||||
fn from(mplace: &MPlaceTy<'tcx, Tag>) -> Self {
|
||||
PlaceTy { place: Place::Ptr(**mplace), layout: mplace.layout }
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx, Tag: Provenance> From<&'_ mut MPlaceTy<'tcx, Tag>> for PlaceTy<'tcx, Tag> {
|
||||
#[inline(always)]
|
||||
fn from(mplace: &mut MPlaceTy<'tcx, Tag>) -> Self {
|
||||
PlaceTy { place: Place::Ptr(**mplace), layout: mplace.layout }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -92,7 +92,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> Value<'mir, 'tcx, M>
|
|||
&self,
|
||||
_ecx: &InterpCx<'mir, 'tcx, M>,
|
||||
) -> InterpResult<'tcx, OpTy<'tcx, M::PointerTag>> {
|
||||
Ok((*self).into())
|
||||
Ok(self.into())
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
|
|
|
@ -1447,7 +1447,7 @@ impl HandlerInner {
|
|||
self.flags.treat_err_as_bug.map(|c| c.get()).unwrap_or(0),
|
||||
) {
|
||||
(1, 1) => panic!("aborting due to `-Z treat-err-as-bug=1`"),
|
||||
(0, _) | (1, _) => {}
|
||||
(0 | 1, _) => {}
|
||||
(count, as_bug) => panic!(
|
||||
"aborting after {} errors due to `-Z treat-err-as-bug={}`",
|
||||
count, as_bug,
|
||||
|
|
|
@ -1865,3 +1865,11 @@ extern "C" void LLVMRustGetMangledName(LLVMValueRef V, RustStringRef Str) {
|
|||
GlobalValue *GV = unwrap<GlobalValue>(V);
|
||||
Mangler().getNameWithPrefix(OS, GV, true);
|
||||
}
|
||||
|
||||
// LLVMGetAggregateElement was added in LLVM 15. For earlier LLVM versions just
|
||||
// use its implementation.
|
||||
#if LLVM_VERSION_LT(15, 0)
|
||||
extern "C" LLVMValueRef LLVMGetAggregateElement(LLVMValueRef C, unsigned Idx) {
|
||||
return wrap(unwrap<Constant>(C)->getAggregateElement(Idx));
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1503,6 +1503,8 @@ impl<'a: 'ast, 'ast> LateResolutionVisitor<'a, '_, 'ast> {
|
|||
Some(match name {
|
||||
"byte" => sym::u8, // In Java, bytes are signed, but in practice one almost always wants unsigned bytes.
|
||||
"short" => sym::i16,
|
||||
"Bool" => sym::bool,
|
||||
"Boolean" => sym::bool,
|
||||
"boolean" => sym::bool,
|
||||
"int" => sym::i32,
|
||||
"long" => sym::i64,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue