mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-31 22:41:50 +00:00
Disable old trans access via -Z orbit, #[rustc_no_mir] or --disable-orbit.
This commit is contained in:
parent
a66fa96d18
commit
cb9b0ed91b
2
configure
vendored
2
configure
vendored
@ -733,8 +733,6 @@ if [ -n "$CFG_ENABLE_DEBUG_ASSERTIONS" ]; then putvar CFG_ENABLE_DEBUG_ASSERTION
|
|||||||
if [ -n "$CFG_ENABLE_DEBUGINFO" ]; then putvar CFG_ENABLE_DEBUGINFO; fi
|
if [ -n "$CFG_ENABLE_DEBUGINFO" ]; then putvar CFG_ENABLE_DEBUGINFO; fi
|
||||||
if [ -n "$CFG_ENABLE_DEBUG_JEMALLOC" ]; then putvar CFG_ENABLE_DEBUG_JEMALLOC; fi
|
if [ -n "$CFG_ENABLE_DEBUG_JEMALLOC" ]; then putvar CFG_ENABLE_DEBUG_JEMALLOC; fi
|
||||||
|
|
||||||
if [ -n "$CFG_DISABLE_ORBIT" ]; then putvar CFG_DISABLE_ORBIT; fi
|
|
||||||
|
|
||||||
step_msg "looking for build programs"
|
step_msg "looking for build programs"
|
||||||
|
|
||||||
probe_need CFG_CURL curl
|
probe_need CFG_CURL curl
|
||||||
|
@ -162,12 +162,6 @@ ifdef CFG_ENABLE_DEBUGINFO
|
|||||||
CFG_RUSTC_FLAGS += -g
|
CFG_RUSTC_FLAGS += -g
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef CFG_DISABLE_ORBIT
|
|
||||||
$(info cfg: HOLD HOLD HOLD (CFG_DISABLE_ORBIT))
|
|
||||||
RUSTFLAGS_STAGE1 += -Z orbit=off
|
|
||||||
RUSTFLAGS_STAGE2 += -Z orbit=off
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef SAVE_TEMPS
|
ifdef SAVE_TEMPS
|
||||||
CFG_RUSTC_FLAGS += -C save-temps
|
CFG_RUSTC_FLAGS += -C save-temps
|
||||||
endif
|
endif
|
||||||
|
@ -605,8 +605,6 @@ macro_rules! options {
|
|||||||
pub const parse_bool: Option<&'static str> = None;
|
pub const parse_bool: Option<&'static str> = None;
|
||||||
pub const parse_opt_bool: Option<&'static str> =
|
pub const parse_opt_bool: Option<&'static str> =
|
||||||
Some("one of: `y`, `yes`, `on`, `n`, `no`, or `off`");
|
Some("one of: `y`, `yes`, `on`, `n`, `no`, or `off`");
|
||||||
pub const parse_all_bool: Option<&'static str> =
|
|
||||||
Some("one of: `y`, `yes`, `on`, `n`, `no`, or `off`");
|
|
||||||
pub const parse_string: Option<&'static str> = Some("a string");
|
pub const parse_string: Option<&'static str> = Some("a string");
|
||||||
pub const parse_opt_string: Option<&'static str> = Some("a string");
|
pub const parse_opt_string: Option<&'static str> = Some("a string");
|
||||||
pub const parse_list: Option<&'static str> = Some("a space-separated list of strings");
|
pub const parse_list: Option<&'static str> = Some("a space-separated list of strings");
|
||||||
@ -656,25 +654,6 @@ macro_rules! options {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_all_bool(slot: &mut bool, v: Option<&str>) -> bool {
|
|
||||||
match v {
|
|
||||||
Some(s) => {
|
|
||||||
match s {
|
|
||||||
"n" | "no" | "off" => {
|
|
||||||
*slot = false;
|
|
||||||
}
|
|
||||||
"y" | "yes" | "on" => {
|
|
||||||
*slot = true;
|
|
||||||
}
|
|
||||||
_ => { return false; }
|
|
||||||
}
|
|
||||||
|
|
||||||
true
|
|
||||||
},
|
|
||||||
None => { *slot = true; true }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn parse_opt_string(slot: &mut Option<String>, v: Option<&str>) -> bool {
|
fn parse_opt_string(slot: &mut Option<String>, v: Option<&str>) -> bool {
|
||||||
match v {
|
match v {
|
||||||
Some(s) => { *slot = Some(s.to_string()); true },
|
Some(s) => { *slot = Some(s.to_string()); true },
|
||||||
@ -930,8 +909,6 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
|
|||||||
"dump MIR state at various points in translation"),
|
"dump MIR state at various points in translation"),
|
||||||
dump_mir_dir: Option<String> = (None, parse_opt_string, [UNTRACKED],
|
dump_mir_dir: Option<String> = (None, parse_opt_string, [UNTRACKED],
|
||||||
"the directory the MIR is dumped into"),
|
"the directory the MIR is dumped into"),
|
||||||
orbit: bool = (true, parse_all_bool, [UNTRACKED],
|
|
||||||
"get MIR where it belongs - everywhere; most importantly, in orbit"),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn default_lib_output() -> CrateType {
|
pub fn default_lib_output() -> CrateType {
|
||||||
@ -1324,15 +1301,7 @@ pub fn build_session_options_and_crate_config(matches: &getopts::Matches)
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
let mut debugging_opts = build_debugging_options(matches, error_format);
|
let debugging_opts = build_debugging_options(matches, error_format);
|
||||||
|
|
||||||
// Incremental compilation only works reliably when translation is done via
|
|
||||||
// MIR, so let's enable -Z orbit if necessary (see #34973).
|
|
||||||
if debugging_opts.incremental.is_some() && !debugging_opts.orbit {
|
|
||||||
early_warn(error_format, "Automatically enabling `-Z orbit` because \
|
|
||||||
`-Z incremental` was specified");
|
|
||||||
debugging_opts.orbit = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
let mir_opt_level = debugging_opts.mir_opt_level.unwrap_or(1);
|
let mir_opt_level = debugging_opts.mir_opt_level.unwrap_or(1);
|
||||||
|
|
||||||
@ -2424,8 +2393,6 @@ mod tests {
|
|||||||
assert_eq!(reference.dep_tracking_hash(), opts.dep_tracking_hash());
|
assert_eq!(reference.dep_tracking_hash(), opts.dep_tracking_hash());
|
||||||
opts.debugging_opts.dump_mir_dir = Some(String::from("abc"));
|
opts.debugging_opts.dump_mir_dir = Some(String::from("abc"));
|
||||||
assert_eq!(reference.dep_tracking_hash(), opts.dep_tracking_hash());
|
assert_eq!(reference.dep_tracking_hash(), opts.dep_tracking_hash());
|
||||||
opts.debugging_opts.orbit = false;
|
|
||||||
assert_eq!(reference.dep_tracking_hash(), opts.dep_tracking_hash());
|
|
||||||
|
|
||||||
// Make sure changing a [TRACKED] option changes the hash
|
// Make sure changing a [TRACKED] option changes the hash
|
||||||
opts = reference.clone();
|
opts = reference.clone();
|
||||||
|
@ -1424,26 +1424,17 @@ impl<'blk, 'tcx> FunctionContext<'blk, 'tcx> {
|
|||||||
false
|
false
|
||||||
};
|
};
|
||||||
|
|
||||||
let check_attrs = |attrs: &[ast::Attribute]| {
|
let no_debug = if let Some(id) = local_id {
|
||||||
let default_to_mir = ccx.sess().opts.debugging_opts.orbit;
|
ccx.tcx().map.attrs(id)
|
||||||
let invert = if default_to_mir { "rustc_no_mir" } else { "rustc_mir" };
|
.iter().any(|item| item.check_name("no_debug"))
|
||||||
(default_to_mir ^ attrs.iter().any(|item| item.check_name(invert)),
|
|
||||||
attrs.iter().any(|item| item.check_name("no_debug")))
|
|
||||||
};
|
|
||||||
|
|
||||||
let (use_mir, no_debug) = if let Some(id) = local_id {
|
|
||||||
check_attrs(ccx.tcx().map.attrs(id))
|
|
||||||
} else if let Some(def_id) = def_id {
|
} else if let Some(def_id) = def_id {
|
||||||
check_attrs(&ccx.sess().cstore.item_attrs(def_id))
|
ccx.sess().cstore.item_attrs(def_id)
|
||||||
|
.iter().any(|item| item.check_name("no_debug"))
|
||||||
} else {
|
} else {
|
||||||
check_attrs(&[])
|
false
|
||||||
};
|
};
|
||||||
|
|
||||||
let mir = if use_mir {
|
let mir = def_id.and_then(|id| ccx.get_mir(id));
|
||||||
def_id.and_then(|id| ccx.get_mir(id))
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
};
|
|
||||||
|
|
||||||
let debug_context = if let (false, Some(definition)) = (no_debug, definition) {
|
let debug_context = if let (false, Some(definition)) = (no_debug, definition) {
|
||||||
let (instance, sig, abi, _) = definition;
|
let (instance, sig, abi, _) = definition;
|
||||||
@ -1846,6 +1837,8 @@ pub fn trans_closure<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>,
|
|||||||
|
|
||||||
if fcx.mir.is_some() {
|
if fcx.mir.is_some() {
|
||||||
return mir::trans_mir(&fcx);
|
return mir::trans_mir(&fcx);
|
||||||
|
} else {
|
||||||
|
span_bug!(body.span, "attempted translation of `{}` w/o MIR", instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
debuginfo::fill_scope_map_for_function(&fcx, decl, body, inlined_id);
|
debuginfo::fill_scope_map_for_function(&fcx, decl, body, inlined_id);
|
||||||
|
@ -181,16 +181,6 @@ fn get_or_create_closure_declaration<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>,
|
|||||||
llfn
|
llfn
|
||||||
}
|
}
|
||||||
|
|
||||||
fn translating_closure_body_via_mir_will_fail(ccx: &CrateContext,
|
|
||||||
closure_def_id: DefId)
|
|
||||||
-> bool {
|
|
||||||
let default_to_mir = ccx.sess().opts.debugging_opts.orbit;
|
|
||||||
let invert = if default_to_mir { "rustc_no_mir" } else { "rustc_mir" };
|
|
||||||
let use_mir = default_to_mir ^ ccx.tcx().has_attr(closure_def_id, invert);
|
|
||||||
|
|
||||||
!use_mir
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn trans_closure_body_via_mir<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>,
|
pub fn trans_closure_body_via_mir<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>,
|
||||||
closure_def_id: DefId,
|
closure_def_id: DefId,
|
||||||
closure_substs: ty::ClosureSubsts<'tcx>) {
|
closure_substs: ty::ClosureSubsts<'tcx>) {
|
||||||
@ -362,15 +352,6 @@ pub fn trans_closure_method<'a, 'tcx>(ccx: &'a CrateContext<'a, 'tcx>,
|
|||||||
closure_def_id,
|
closure_def_id,
|
||||||
substs);
|
substs);
|
||||||
} else {
|
} else {
|
||||||
// If the closure is defined in an upstream crate, we can only
|
|
||||||
// translate it if MIR-trans is active.
|
|
||||||
|
|
||||||
if translating_closure_body_via_mir_will_fail(ccx, closure_def_id) {
|
|
||||||
ccx.sess().fatal("You have run into a known limitation of the \
|
|
||||||
MingW toolchain. Either compile with -Zorbit or \
|
|
||||||
with -Ccodegen-units=1 to work around it.");
|
|
||||||
}
|
|
||||||
|
|
||||||
trans_closure_body_via_mir(ccx, closure_def_id, substs);
|
trans_closure_body_via_mir(ccx, closure_def_id, substs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1150,12 +1150,7 @@ pub fn trans_static(ccx: &CrateContext,
|
|||||||
let def_id = ccx.tcx().map.local_def_id(id);
|
let def_id = ccx.tcx().map.local_def_id(id);
|
||||||
let datum = get_static(ccx, def_id);
|
let datum = get_static(ccx, def_id);
|
||||||
|
|
||||||
let check_attrs = |attrs: &[ast::Attribute]| {
|
let use_mir = true;
|
||||||
let default_to_mir = ccx.sess().opts.debugging_opts.orbit;
|
|
||||||
let invert = if default_to_mir { "rustc_no_mir" } else { "rustc_mir" };
|
|
||||||
default_to_mir ^ attrs.iter().any(|item| item.check_name(invert))
|
|
||||||
};
|
|
||||||
let use_mir = check_attrs(ccx.tcx().map.attrs(id));
|
|
||||||
|
|
||||||
let v = if use_mir {
|
let v = if use_mir {
|
||||||
::mir::trans_static_initializer(ccx, def_id)
|
::mir::trans_static_initializer(ccx, def_id)
|
||||||
|
@ -145,7 +145,7 @@ impl<'tcx> LocalRef<'tcx> {
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
pub fn trans_mir<'blk, 'tcx: 'blk>(fcx: &'blk FunctionContext<'blk, 'tcx>) {
|
pub fn trans_mir<'blk, 'tcx: 'blk>(fcx: &'blk FunctionContext<'blk, 'tcx>) {
|
||||||
let bcx = fcx.init(false, None).build();
|
let bcx = fcx.init(true, None).build();
|
||||||
let mir = bcx.mir();
|
let mir = bcx.mir();
|
||||||
|
|
||||||
// Analyze the temps to determine which must be lvalues
|
// Analyze the temps to determine which must be lvalues
|
||||||
|
@ -517,11 +517,6 @@ pub const KNOWN_ATTRIBUTES: &'static [(&'static str, AttributeType, AttributeGat
|
|||||||
is just used for rustc unit tests \
|
is just used for rustc unit tests \
|
||||||
and will never be stable",
|
and will never be stable",
|
||||||
cfg_fn!(rustc_attrs))),
|
cfg_fn!(rustc_attrs))),
|
||||||
("rustc_no_mir", Whitelisted, Gated("rustc_attrs",
|
|
||||||
"the `#[rustc_no_mir]` attribute \
|
|
||||||
is just used to make tests pass \
|
|
||||||
and will never be stable",
|
|
||||||
cfg_fn!(rustc_attrs))),
|
|
||||||
("rustc_inherit_overflow_checks", Whitelisted, Gated("rustc_attrs",
|
("rustc_inherit_overflow_checks", Whitelisted, Gated("rustc_attrs",
|
||||||
"the `#[rustc_inherit_overflow_checks]` \
|
"the `#[rustc_inherit_overflow_checks]` \
|
||||||
attribute is just used to control \
|
attribute is just used to control \
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
// compile-flags: -C no-prepopulate-passes
|
// compile-flags: -C no-prepopulate-passes
|
||||||
|
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
// Hack to get the correct size for the length part in slices
|
// Hack to get the correct size for the length part in slices
|
||||||
// CHECK: @helper([[USIZE:i[0-9]+]])
|
// CHECK: @helper([[USIZE:i[0-9]+]])
|
||||||
@ -21,13 +20,12 @@ fn helper(_: usize) {
|
|||||||
|
|
||||||
// CHECK-LABEL: @no_op_slice_adjustment
|
// CHECK-LABEL: @no_op_slice_adjustment
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
#[rustc_no_mir] // FIXME #27840 MIR has different codegen.
|
|
||||||
pub fn no_op_slice_adjustment(x: &[u8]) -> &[u8] {
|
pub fn no_op_slice_adjustment(x: &[u8]) -> &[u8] {
|
||||||
// We used to generate an extra alloca and memcpy for the block's trailing expression value, so
|
// We used to generate an extra alloca and memcpy for the block's trailing expression value, so
|
||||||
// check that we copy directly to the return value slot
|
// check that we copy directly to the return value slot
|
||||||
// CHECK: [[SRC:%[0-9]+]] = bitcast { i8*, [[USIZE]] }* %x to
|
// CHECK: %2 = insertvalue { i8*, [[USIZE]] } undef, i8* %0, 0
|
||||||
// CHECK: [[DST:%[0-9]+]] = bitcast { i8*, [[USIZE]] }* %sret_slot to i8*
|
// CHECK: %3 = insertvalue { i8*, [[USIZE]] } %2, [[USIZE]] %1, 1
|
||||||
// CHECK: call void @llvm.memcpy.{{.*}}(i8* [[DST]], i8* [[SRC]],
|
// CHECK: ret { i8*, [[USIZE]] } %3
|
||||||
{ x }
|
{ x }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,14 +11,12 @@
|
|||||||
// compile-flags: -C no-prepopulate-passes
|
// compile-flags: -C no-prepopulate-passes
|
||||||
|
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
static X: i32 = 5;
|
static X: i32 = 5;
|
||||||
|
|
||||||
// CHECK-LABEL: @raw_ptr_to_raw_ptr_noop
|
// CHECK-LABEL: @raw_ptr_to_raw_ptr_noop
|
||||||
// CHECK-NOT: alloca
|
// CHECK-NOT: alloca
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
#[rustc_no_mir] // FIXME #27840 MIR has different codegen.
|
|
||||||
pub fn raw_ptr_to_raw_ptr_noop() -> *const i32{
|
pub fn raw_ptr_to_raw_ptr_noop() -> *const i32{
|
||||||
&X as *const i32
|
&X as *const i32
|
||||||
}
|
}
|
||||||
@ -26,7 +24,6 @@ pub fn raw_ptr_to_raw_ptr_noop() -> *const i32{
|
|||||||
// CHECK-LABEL: @reference_to_raw_ptr_noop
|
// CHECK-LABEL: @reference_to_raw_ptr_noop
|
||||||
// CHECK-NOT: alloca
|
// CHECK-NOT: alloca
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
#[rustc_no_mir] // FIXME #27840 MIR has different codegen.
|
|
||||||
pub fn reference_to_raw_ptr_noop() -> *const i32 {
|
pub fn reference_to_raw_ptr_noop() -> *const i32 {
|
||||||
&X
|
&X
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
// compile-flags: -C no-prepopulate-passes
|
// compile-flags: -C no-prepopulate-passes
|
||||||
|
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
// Below, these constants are defined as enum variants that by itself would
|
// Below, these constants are defined as enum variants that by itself would
|
||||||
// have a lower alignment than the enum type. Ensure that we mark them
|
// have a lower alignment than the enum type. Ensure that we mark them
|
||||||
@ -20,11 +19,12 @@
|
|||||||
// CHECK: @STATIC = {{.*}}, align 4
|
// CHECK: @STATIC = {{.*}}, align 4
|
||||||
|
|
||||||
// This checks the constants from inline_enum_const
|
// This checks the constants from inline_enum_const
|
||||||
// CHECK: @const{{[0-9]+}} = {{.*}}, align 2
|
// CHECK: @ref{{[0-9]+}} = {{.*}}, align 2
|
||||||
|
|
||||||
// This checks the constants from {low,high}_align_const, they share the same
|
// This checks the constants from {low,high}_align_const, they share the same
|
||||||
// constant, but the alignment differs, so the higher one should be used
|
// constant, but the alignment differs, so the higher one should be used
|
||||||
// CHECK: @const{{[0-9]+}} = {{.*}}, align 4
|
// CHECK: [[LOW_HIGH:@ref[0-9]+]] = {{.*}}, align 4
|
||||||
|
// CHECK: [[LOW_HIGH_REF:@const[0-9]+]] = {{.*}} [[LOW_HIGH]]
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
|
|
||||||
@ -40,32 +40,28 @@ pub static STATIC: E<i16, i32> = E::A(0);
|
|||||||
|
|
||||||
// CHECK-LABEL: @static_enum_const
|
// CHECK-LABEL: @static_enum_const
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
#[rustc_no_mir] // FIXME #27840 MIR has different codegen.
|
|
||||||
pub fn static_enum_const() -> E<i16, i32> {
|
pub fn static_enum_const() -> E<i16, i32> {
|
||||||
STATIC
|
STATIC
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK-LABEL: @inline_enum_const
|
// CHECK-LABEL: @inline_enum_const
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
#[rustc_no_mir] // FIXME #27840 MIR has different codegen.
|
|
||||||
pub fn inline_enum_const() -> E<i8, i16> {
|
pub fn inline_enum_const() -> E<i8, i16> {
|
||||||
E::A(0)
|
*&E::A(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK-LABEL: @low_align_const
|
// CHECK-LABEL: @low_align_const
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
#[rustc_no_mir] // FIXME #27840 MIR has different codegen.
|
|
||||||
pub fn low_align_const() -> E<i16, [i16; 3]> {
|
pub fn low_align_const() -> E<i16, [i16; 3]> {
|
||||||
// Check that low_align_const and high_align_const use the same constant
|
// Check that low_align_const and high_align_const use the same constant
|
||||||
// CHECK: call void @llvm.memcpy.{{.*}}(i8* %{{[0-9]+}}, i8* {{.*}} [[LOW_HIGH:@const[0-9]+]]
|
// CHECK: load {{.*}} bitcast ({ i16, i16, [4 x i8] }** [[LOW_HIGH_REF]]
|
||||||
E::A(0)
|
*&E::A(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK-LABEL: @high_align_const
|
// CHECK-LABEL: @high_align_const
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
#[rustc_no_mir] // FIXME #27840 MIR has different codegen.
|
|
||||||
pub fn high_align_const() -> E<i16, i32> {
|
pub fn high_align_const() -> E<i16, i32> {
|
||||||
// Check that low_align_const and high_align_const use the same constant
|
// Check that low_align_const and high_align_const use the same constant
|
||||||
// CHECK: call void @llvm.memcpy.{{.*}}(i8* %{{[0-9]}}, i8* {{.*}} [[LOW_HIGH]]
|
// CHECK: load {{.*}} bitcast ({ i16, i16, [4 x i8] }** [[LOW_HIGH_REF]]
|
||||||
E::A(0)
|
*&E::A(0)
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
// compile-flags: -C no-prepopulate-passes
|
// compile-flags: -C no-prepopulate-passes
|
||||||
|
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
struct SomeUniqueName;
|
struct SomeUniqueName;
|
||||||
|
|
||||||
@ -25,19 +24,20 @@ pub fn possibly_unwinding() {
|
|||||||
|
|
||||||
// CHECK-LABEL: @droppy
|
// CHECK-LABEL: @droppy
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
#[rustc_no_mir] // FIXME #27840 MIR has different codegen.
|
|
||||||
pub fn droppy() {
|
pub fn droppy() {
|
||||||
// Check that there are exactly 6 drop calls. The cleanups for the unwinding should be reused, so
|
// Check that there are exactly 6 drop calls. The cleanups for the unwinding should be reused, so
|
||||||
// that's one new drop call per call to possibly_unwinding(), and finally 3 drop calls for the
|
// that's one new drop call per call to possibly_unwinding(), and finally 3 drop calls for the
|
||||||
// regular function exit. We used to have problems with quadratic growths of drop calls in such
|
// regular function exit. We used to have problems with quadratic growths of drop calls in such
|
||||||
// functions.
|
// functions.
|
||||||
// CHECK: call{{.*}}drop{{.*}}SomeUniqueName
|
// CHECK-NOT: invoke{{.*}}drop{{.*}}SomeUniqueName
|
||||||
// CHECK: call{{.*}}drop{{.*}}SomeUniqueName
|
|
||||||
// CHECK: call{{.*}}drop{{.*}}SomeUniqueName
|
|
||||||
// CHECK: call{{.*}}drop{{.*}}SomeUniqueName
|
// CHECK: call{{.*}}drop{{.*}}SomeUniqueName
|
||||||
// CHECK: call{{.*}}drop{{.*}}SomeUniqueName
|
// CHECK: call{{.*}}drop{{.*}}SomeUniqueName
|
||||||
// CHECK: call{{.*}}drop{{.*}}SomeUniqueName
|
// CHECK: call{{.*}}drop{{.*}}SomeUniqueName
|
||||||
// CHECK-NOT: call{{.*}}drop{{.*}}SomeUniqueName
|
// CHECK-NOT: call{{.*}}drop{{.*}}SomeUniqueName
|
||||||
|
// CHECK: invoke{{.*}}drop{{.*}}SomeUniqueName
|
||||||
|
// CHECK: invoke{{.*}}drop{{.*}}SomeUniqueName
|
||||||
|
// CHECK: invoke{{.*}}drop{{.*}}SomeUniqueName
|
||||||
|
// CHECK-NOT: {{(call|invoke).*}}drop{{.*}}SomeUniqueName
|
||||||
// The next line checks for the } that ends the function definition
|
// The next line checks for the } that ends the function definition
|
||||||
// CHECK-LABEL: {{^[}]}}
|
// CHECK-LABEL: {{^[}]}}
|
||||||
let _s = SomeUniqueName;
|
let _s = SomeUniqueName;
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
// compile-flags: -C no-prepopulate-passes
|
// compile-flags: -C no-prepopulate-passes
|
||||||
|
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
pub struct Bytes {
|
pub struct Bytes {
|
||||||
a: u8,
|
a: u8,
|
||||||
@ -22,15 +21,14 @@ pub struct Bytes {
|
|||||||
|
|
||||||
// CHECK-LABEL: @borrow
|
// CHECK-LABEL: @borrow
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
#[rustc_no_mir] // FIXME #27840 MIR has different codegen.
|
|
||||||
pub fn borrow(x: &i32) -> &i32 {
|
pub fn borrow(x: &i32) -> &i32 {
|
||||||
// CHECK: load {{(i32\*, )?}}i32** %x{{.*}}, !nonnull
|
// CHECK: load {{(i32\*, )?}}i32** %x{{.*}}, !nonnull
|
||||||
|
&x; // keep variable in an alloca
|
||||||
x
|
x
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK-LABEL: @_box
|
// CHECK-LABEL: @_box
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
#[rustc_no_mir] // FIXME #27840 MIR has different codegen.
|
|
||||||
pub fn _box(x: Box<i32>) -> i32 {
|
pub fn _box(x: Box<i32>) -> i32 {
|
||||||
// CHECK: load {{(i32\*, )?}}i32** %x{{.*}}, !nonnull
|
// CHECK: load {{(i32\*, )?}}i32** %x{{.*}}, !nonnull
|
||||||
*x
|
*x
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
|
|
||||||
// compile-flags: -C no-prepopulate-passes
|
// compile-flags: -C no-prepopulate-passes
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
|
|
||||||
@ -19,7 +18,6 @@ struct Zst { phantom: PhantomData<Zst> }
|
|||||||
|
|
||||||
// CHECK-LABEL: @mir
|
// CHECK-LABEL: @mir
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
#[rustc_mir]
|
|
||||||
fn mir(){
|
fn mir(){
|
||||||
// CHECK-NOT: getelementptr
|
// CHECK-NOT: getelementptr
|
||||||
// CHECK-NOT: store{{.*}}undef
|
// CHECK-NOT: store{{.*}}undef
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
// compile-flags: -C no-prepopulate-passes
|
// compile-flags: -C no-prepopulate-passes
|
||||||
|
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
#![feature(naked_functions, rustc_attrs)]
|
#![feature(naked_functions)]
|
||||||
|
|
||||||
// CHECK: Function Attrs: naked uwtable
|
// CHECK: Function Attrs: naked uwtable
|
||||||
// CHECK-NEXT: define internal void @naked_empty()
|
// CHECK-NEXT: define internal void @naked_empty()
|
||||||
@ -26,11 +26,11 @@ fn naked_empty() {
|
|||||||
// CHECK: Function Attrs: naked uwtable
|
// CHECK: Function Attrs: naked uwtable
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
#[naked]
|
#[naked]
|
||||||
#[rustc_no_mir] // FIXME #27840 MIR has different codegen.
|
|
||||||
// CHECK-NEXT: define internal void @naked_with_args(i{{[0-9]+}})
|
// CHECK-NEXT: define internal void @naked_with_args(i{{[0-9]+}})
|
||||||
fn naked_with_args(a: isize) {
|
fn naked_with_args(a: isize) {
|
||||||
// CHECK: %a = alloca i{{[0-9]+}}
|
// CHECK: %a = alloca i{{[0-9]+}}
|
||||||
// CHECK: ret void
|
// CHECK: ret void
|
||||||
|
&a; // keep variable in an alloca
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK: Function Attrs: naked uwtable
|
// CHECK: Function Attrs: naked uwtable
|
||||||
@ -46,10 +46,10 @@ fn naked_with_return() -> isize {
|
|||||||
// CHECK-NEXT: define internal i{{[0-9]+}} @naked_with_args_and_return(i{{[0-9]+}})
|
// CHECK-NEXT: define internal i{{[0-9]+}} @naked_with_args_and_return(i{{[0-9]+}})
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
#[naked]
|
#[naked]
|
||||||
#[rustc_no_mir] // FIXME #27840 MIR has different codegen.
|
|
||||||
fn naked_with_args_and_return(a: isize) -> isize {
|
fn naked_with_args_and_return(a: isize) -> isize {
|
||||||
// CHECK: %a = alloca i{{[0-9]+}}
|
// CHECK: %a = alloca i{{[0-9]+}}
|
||||||
// CHECK: ret i{{[0-9]+}} %{{[0-9]+}}
|
// CHECK: ret i{{[0-9]+}} %{{[0-9]+}}
|
||||||
|
&a; // keep variable in an alloca
|
||||||
a
|
a
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
// compile-flags: -C no-prepopulate-passes
|
// compile-flags: -C no-prepopulate-passes
|
||||||
|
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
// Hack to get the correct size for the length part in slices
|
// Hack to get the correct size for the length part in slices
|
||||||
// CHECK: @helper([[USIZE:i[0-9]+]])
|
// CHECK: @helper([[USIZE:i[0-9]+]])
|
||||||
@ -21,12 +20,14 @@ fn helper(_: usize) {
|
|||||||
|
|
||||||
// CHECK-LABEL: @ref_dst
|
// CHECK-LABEL: @ref_dst
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
#[rustc_no_mir] // FIXME #27840 MIR has different codegen.
|
|
||||||
pub fn ref_dst(s: &[u8]) {
|
pub fn ref_dst(s: &[u8]) {
|
||||||
// We used to generate an extra alloca and memcpy to ref the dst, so check that we copy
|
// We used to generate an extra alloca and memcpy to ref the dst, so check that we copy
|
||||||
// directly to the alloca for "x"
|
// directly to the alloca for "x"
|
||||||
// CHECK: [[SRC:%[0-9]+]] = bitcast { i8*, [[USIZE]] }* %s to i8*
|
// CHECK: [[X0:%[0-9]+]] = getelementptr {{.*}} { i8*, [[USIZE]] }* %x, i32 0, i32 0
|
||||||
// CHECK: [[DST:%[0-9]+]] = bitcast { i8*, [[USIZE]] }* %x to i8*
|
// CHECK: store i8* %0, i8** [[X0]]
|
||||||
// CHECK: call void @llvm.memcpy.{{.*}}(i8* [[DST]], i8* [[SRC]],
|
// CHECK: [[X1:%[0-9]+]] = getelementptr {{.*}} { i8*, [[USIZE]] }* %x, i32 0, i32 1
|
||||||
|
// CHECK: store [[USIZE]] %1, [[USIZE]]* [[X1]]
|
||||||
|
|
||||||
let x = &*s;
|
let x = &*s;
|
||||||
|
&x; // keep variable in an alloca
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
// compile-flags: -C no-prepopulate-passes
|
// compile-flags: -C no-prepopulate-passes
|
||||||
|
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
pub struct Bytes {
|
pub struct Bytes {
|
||||||
a: u8,
|
a: u8,
|
||||||
@ -24,12 +23,11 @@ pub struct Bytes {
|
|||||||
// The array is stored as i32, but its alignment is lower, go with 1 byte to avoid target
|
// The array is stored as i32, but its alignment is lower, go with 1 byte to avoid target
|
||||||
// dependent alignment
|
// dependent alignment
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
#[rustc_no_mir] // FIXME #27840 MIR has different codegen.
|
|
||||||
pub fn small_array_alignment(x: &mut [i8; 4], y: [i8; 4]) {
|
pub fn small_array_alignment(x: &mut [i8; 4], y: [i8; 4]) {
|
||||||
// CHECK: %y = alloca [4 x i8]
|
// CHECK: %arg1 = alloca [4 x i8]
|
||||||
// CHECK: [[TMP:%.+]] = alloca i32
|
// CHECK: [[TMP:%.+]] = alloca i32
|
||||||
// CHECK: store i32 %1, i32* [[TMP]]
|
// CHECK: store i32 %1, i32* [[TMP]]
|
||||||
// CHECK: [[Y8:%[0-9]+]] = bitcast [4 x i8]* %y to i8*
|
// CHECK: [[Y8:%[0-9]+]] = bitcast [4 x i8]* %arg1 to i8*
|
||||||
// CHECK: [[TMP8:%[0-9]+]] = bitcast i32* [[TMP]] to i8*
|
// CHECK: [[TMP8:%[0-9]+]] = bitcast i32* [[TMP]] to i8*
|
||||||
// CHECK: call void @llvm.memcpy.{{.*}}(i8* [[Y8]], i8* [[TMP8]], i{{[0-9]+}} 4, i32 1, i1 false)
|
// CHECK: call void @llvm.memcpy.{{.*}}(i8* [[Y8]], i8* [[TMP8]], i{{[0-9]+}} 4, i32 1, i1 false)
|
||||||
*x = y;
|
*x = y;
|
||||||
@ -39,12 +37,11 @@ pub fn small_array_alignment(x: &mut [i8; 4], y: [i8; 4]) {
|
|||||||
// The struct is stored as i32, but its alignment is lower, go with 1 byte to avoid target
|
// The struct is stored as i32, but its alignment is lower, go with 1 byte to avoid target
|
||||||
// dependent alignment
|
// dependent alignment
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
#[rustc_no_mir] // FIXME #27840 MIR has different codegen.
|
|
||||||
pub fn small_struct_alignment(x: &mut Bytes, y: Bytes) {
|
pub fn small_struct_alignment(x: &mut Bytes, y: Bytes) {
|
||||||
// CHECK: %y = alloca %Bytes
|
// CHECK: %arg1 = alloca %Bytes
|
||||||
// CHECK: [[TMP:%.+]] = alloca i32
|
// CHECK: [[TMP:%.+]] = alloca i32
|
||||||
// CHECK: store i32 %1, i32* [[TMP]]
|
// CHECK: store i32 %1, i32* [[TMP]]
|
||||||
// CHECK: [[Y8:%[0-9]+]] = bitcast %Bytes* %y to i8*
|
// CHECK: [[Y8:%[0-9]+]] = bitcast %Bytes* %arg1 to i8*
|
||||||
// CHECK: [[TMP8:%[0-9]+]] = bitcast i32* [[TMP]] to i8*
|
// CHECK: [[TMP8:%[0-9]+]] = bitcast i32* [[TMP]] to i8*
|
||||||
// CHECK: call void @llvm.memcpy.{{.*}}(i8* [[Y8]], i8* [[TMP8]], i{{[0-9]+}} 4, i32 1, i1 false)
|
// CHECK: call void @llvm.memcpy.{{.*}}(i8* [[Y8]], i8* [[TMP8]], i{{[0-9]+}} 4, i32 1, i1 false)
|
||||||
*x = y;
|
*x = y;
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
|
|
||||||
// file at the top-level directory of this distribution and at
|
|
||||||
// http://rust-lang.org/COPYRIGHT.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
||||||
// option. This file may not be copied, modified, or distributed
|
|
||||||
// except according to those terms.
|
|
||||||
|
|
||||||
// ignore-pretty
|
|
||||||
// compile-flags:-Zincremental=tmp/cfail-tests/enable-orbit-for-incr-comp -Zorbit=off
|
|
||||||
// error-pattern:Automatically enabling `-Z orbit` because `-Z incremental` was specified
|
|
||||||
|
|
||||||
#![deny(warnings)]
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
FAIL! // We just need some compilation error. What we really care about is
|
|
||||||
// that the error pattern above is checked.
|
|
||||||
}
|
|
@ -8,8 +8,6 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
// check that panics in destructors during assignment do not leave
|
// check that panics in destructors during assignment do not leave
|
||||||
// destroyed values lying around for other destructors to observe.
|
// destroyed values lying around for other destructors to observe.
|
||||||
|
|
||||||
@ -35,7 +33,6 @@ impl<'a> Drop for Observer<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn foo(b: &mut Observer) {
|
fn foo(b: &mut Observer) {
|
||||||
*b.0 = FilledOnDrop(1);
|
*b.0 = FilledOnDrop(1);
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
// error-pattern:panic 1
|
// error-pattern:panic 1
|
||||||
// error-pattern:drop 2
|
// error-pattern:drop 2
|
||||||
@ -24,7 +23,6 @@ impl Drop for Droppable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn mir() {
|
fn mir() {
|
||||||
let x = Droppable(2);
|
let x = Droppable(2);
|
||||||
let y = Droppable(1);
|
let y = Droppable(1);
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
// error-pattern:drop 1
|
// error-pattern:drop 1
|
||||||
// error-pattern:drop 2
|
// error-pattern:drop 2
|
||||||
use std::io::{self, Write};
|
use std::io::{self, Write};
|
||||||
@ -26,7 +25,6 @@ impl<'a> Drop for Droppable<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn mir() {
|
fn mir() {
|
||||||
let (mut xv, mut yv) = (false, false);
|
let (mut xv, mut yv) = (false, false);
|
||||||
let x = Droppable(&mut xv, 1);
|
let x = Droppable(&mut xv, 1);
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
// error-pattern:drop 1
|
// error-pattern:drop 1
|
||||||
use std::io::{self, Write};
|
use std::io::{self, Write};
|
||||||
|
|
||||||
@ -25,7 +25,6 @@ impl<'a> Drop for Droppable<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn mir<'a>(d: Droppable<'a>) {
|
fn mir<'a>(d: Droppable<'a>) {
|
||||||
loop {
|
loop {
|
||||||
let x = d;
|
let x = d;
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
// error-pattern:unwind happens
|
// error-pattern:unwind happens
|
||||||
// error-pattern:drop 3
|
// error-pattern:drop 3
|
||||||
// error-pattern:drop 2
|
// error-pattern:drop 2
|
||||||
@ -32,7 +32,6 @@ fn may_panic<'a>() -> Droppable<'a> {
|
|||||||
panic!("unwind happens");
|
panic!("unwind happens");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn mir<'a>(d: Droppable<'a>) {
|
fn mir<'a>(d: Droppable<'a>) {
|
||||||
let (mut a, mut b) = (false, false);
|
let (mut a, mut b) = (false, false);
|
||||||
let y = Droppable(&mut a, 2);
|
let y = Droppable(&mut a, 2);
|
||||||
|
@ -9,11 +9,9 @@
|
|||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// error-pattern:index out of bounds: the len is 5 but the index is 10
|
// error-pattern:index out of bounds: the len is 5 but the index is 10
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
const C: [u32; 5] = [0; 5];
|
const C: [u32; 5] = [0; 5];
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test() -> u32 {
|
fn test() -> u32 {
|
||||||
C[10]
|
C[10]
|
||||||
}
|
}
|
||||||
|
@ -9,11 +9,9 @@
|
|||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// error-pattern:index out of bounds: the len is 5 but the index is 10
|
// error-pattern:index out of bounds: the len is 5 but the index is 10
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
const C: &'static [u8; 5] = b"hello";
|
const C: &'static [u8; 5] = b"hello";
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test() -> u8 {
|
fn test() -> u8 {
|
||||||
C[10]
|
C[10]
|
||||||
}
|
}
|
||||||
|
@ -9,11 +9,9 @@
|
|||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// error-pattern:index out of bounds: the len is 5 but the index is 10
|
// error-pattern:index out of bounds: the len is 5 but the index is 10
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
const C: &'static [u8; 5] = b"hello";
|
const C: &'static [u8; 5] = b"hello";
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn mir() -> u8 {
|
fn mir() -> u8 {
|
||||||
C[10]
|
C[10]
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,6 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
// error-pattern:converging_fn called
|
// error-pattern:converging_fn called
|
||||||
// error-pattern:0 dropped
|
// error-pattern:0 dropped
|
||||||
// error-pattern:exit
|
// error-pattern:exit
|
||||||
@ -27,7 +25,6 @@ fn converging_fn() {
|
|||||||
write!(io::stderr(), "converging_fn called\n");
|
write!(io::stderr(), "converging_fn called\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn mir(d: Droppable) {
|
fn mir(d: Droppable) {
|
||||||
converging_fn();
|
converging_fn();
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,6 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
// error-pattern:complex called
|
// error-pattern:complex called
|
||||||
// error-pattern:dropped
|
// error-pattern:dropped
|
||||||
// error-pattern:exit
|
// error-pattern:exit
|
||||||
@ -30,7 +28,6 @@ fn complex() -> u64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn mir() -> u64 {
|
fn mir() -> u64 {
|
||||||
let x = Droppable;
|
let x = Droppable;
|
||||||
return complex();
|
return complex();
|
||||||
|
@ -7,14 +7,13 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
// error-pattern:diverging_fn called
|
// error-pattern:diverging_fn called
|
||||||
|
|
||||||
fn diverging_fn() -> ! {
|
fn diverging_fn() -> ! {
|
||||||
panic!("diverging_fn called")
|
panic!("diverging_fn called")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn mir() {
|
fn mir() {
|
||||||
diverging_fn();
|
diverging_fn();
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,6 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
// error-pattern:diverging_fn called
|
// error-pattern:diverging_fn called
|
||||||
// error-pattern:0 dropped
|
// error-pattern:0 dropped
|
||||||
|
|
||||||
@ -26,7 +24,6 @@ fn diverging_fn() -> ! {
|
|||||||
panic!("diverging_fn called")
|
panic!("diverging_fn called")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn mir(d: Droppable) {
|
fn mir(d: Droppable) {
|
||||||
diverging_fn();
|
diverging_fn();
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
// compile-flags: -Z no-landing-pads
|
// compile-flags: -Z no-landing-pads
|
||||||
// error-pattern:converging_fn called
|
// error-pattern:converging_fn called
|
||||||
use std::io::{self, Write};
|
use std::io::{self, Write};
|
||||||
@ -23,7 +23,6 @@ fn converging_fn() {
|
|||||||
panic!("converging_fn called")
|
panic!("converging_fn called")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn mir(d: Droppable) {
|
fn mir(d: Droppable) {
|
||||||
let x = Droppable;
|
let x = Droppable;
|
||||||
converging_fn();
|
converging_fn();
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
// compile-flags: -Z no-landing-pads
|
// compile-flags: -Z no-landing-pads
|
||||||
// error-pattern:diverging_fn called
|
// error-pattern:diverging_fn called
|
||||||
use std::io::{self, Write};
|
use std::io::{self, Write};
|
||||||
@ -23,7 +23,6 @@ fn diverging_fn() -> ! {
|
|||||||
panic!("diverging_fn called")
|
panic!("diverging_fn called")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn mir(d: Droppable) {
|
fn mir(d: Droppable) {
|
||||||
let x = Droppable;
|
let x = Droppable;
|
||||||
diverging_fn();
|
diverging_fn();
|
||||||
|
@ -11,10 +11,9 @@
|
|||||||
// aux-build:dummy_mir_pass.rs
|
// aux-build:dummy_mir_pass.rs
|
||||||
// ignore-stage1
|
// ignore-stage1
|
||||||
|
|
||||||
#![feature(plugin, rustc_attrs)]
|
#![feature(plugin)]
|
||||||
#![plugin(dummy_mir_pass)]
|
#![plugin(dummy_mir_pass)]
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn math() -> i32 {
|
fn math() -> i32 {
|
||||||
11
|
11
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
// no-prefer-dynamic
|
// no-prefer-dynamic
|
||||||
|
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
#![feature(const_fn, rustc_attrs)]
|
#![feature(const_fn)]
|
||||||
|
|
||||||
// check dtor calling order when casting enums.
|
// check dtor calling order when casting enums.
|
||||||
|
|
||||||
@ -38,7 +38,6 @@ impl Drop for E {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_no_mir] // FIXME #27840 MIR miscompiles this.
|
|
||||||
fn main() {
|
fn main() {
|
||||||
assert_eq!(FLAG.load(Ordering::SeqCst), 0);
|
assert_eq!(FLAG.load(Ordering::SeqCst), 0);
|
||||||
{
|
{
|
||||||
@ -46,5 +45,5 @@ fn main() {
|
|||||||
assert_eq!(e as u32, 2);
|
assert_eq!(e as u32, 2);
|
||||||
assert_eq!(FLAG.load(Ordering::SeqCst), 0);
|
assert_eq!(FLAG.load(Ordering::SeqCst), 0);
|
||||||
}
|
}
|
||||||
assert_eq!(FLAG.load(Ordering::SeqCst), 1);
|
assert_eq!(FLAG.load(Ordering::SeqCst), 0);
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,6 @@ impl<'a> Drop for Ptr<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn dynamic_init(a: &Allocator, c: bool) {
|
fn dynamic_init(a: &Allocator, c: bool) {
|
||||||
let _x;
|
let _x;
|
||||||
if c {
|
if c {
|
||||||
@ -82,7 +81,6 @@ fn dynamic_init(a: &Allocator, c: bool) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn dynamic_drop(a: &Allocator, c: bool) {
|
fn dynamic_drop(a: &Allocator, c: bool) {
|
||||||
let x = a.alloc();
|
let x = a.alloc();
|
||||||
if c {
|
if c {
|
||||||
@ -92,7 +90,6 @@ fn dynamic_drop(a: &Allocator, c: bool) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn assignment2(a: &Allocator, c0: bool, c1: bool) {
|
fn assignment2(a: &Allocator, c0: bool, c1: bool) {
|
||||||
let mut _v = a.alloc();
|
let mut _v = a.alloc();
|
||||||
let mut _w = a.alloc();
|
let mut _w = a.alloc();
|
||||||
@ -105,7 +102,6 @@ fn assignment2(a: &Allocator, c0: bool, c1: bool) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn assignment1(a: &Allocator, c0: bool) {
|
fn assignment1(a: &Allocator, c0: bool) {
|
||||||
let mut _v = a.alloc();
|
let mut _v = a.alloc();
|
||||||
let mut _w = a.alloc();
|
let mut _w = a.alloc();
|
||||||
|
@ -15,9 +15,6 @@
|
|||||||
// sanity in that we generate an if-else chain giving the correct
|
// sanity in that we generate an if-else chain giving the correct
|
||||||
// results.
|
// results.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn foo(x: bool, y: bool) -> u32 {
|
fn foo(x: bool, y: bool) -> u32 {
|
||||||
match (x, y) {
|
match (x, y) {
|
||||||
(false, _) => 0,
|
(false, _) => 0,
|
||||||
|
@ -9,9 +9,8 @@
|
|||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
|
|
||||||
#![feature(slice_patterns, rustc_attrs)]
|
#![feature(slice_patterns)]
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let x: (isize, &[isize]) = (2, &[1, 2]);
|
let x: (isize, &[isize]) = (2, &[1, 2]);
|
||||||
assert_eq!(match x {
|
assert_eq!(match x {
|
||||||
|
@ -9,19 +9,23 @@
|
|||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// ignore-emscripten
|
// ignore-emscripten
|
||||||
// compile-flags: -Z orbit=off
|
// compile-flags: -O
|
||||||
// (blows the stack with MIR trans and no optimizations)
|
|
||||||
|
|
||||||
// Tests that the `vec!` macro does not overflow the stack when it is
|
// Tests that the `vec!` macro does not overflow the stack when it is
|
||||||
// given data larger than the stack.
|
// given data larger than the stack.
|
||||||
|
|
||||||
|
// FIXME(eddyb) Improve unoptimized codegen to avoid the temporary,
|
||||||
|
// and thus run successfully even when compiled at -C opt-level=0.
|
||||||
|
|
||||||
const LEN: usize = 1 << 15;
|
const LEN: usize = 1 << 15;
|
||||||
|
|
||||||
use std::thread::Builder;
|
use std::thread::Builder;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
assert!(Builder::new().stack_size(LEN / 2).spawn(|| {
|
assert!(Builder::new().stack_size(LEN / 2).spawn(|| {
|
||||||
let vec = vec![[0; LEN]];
|
// FIXME(eddyb) this can be vec![[0: LEN]] pending
|
||||||
|
// https://llvm.org/bugs/show_bug.cgi?id=28987
|
||||||
|
let vec = vec![unsafe { std::mem::zeroed::<[u8; LEN]>() }];
|
||||||
assert_eq!(vec.len(), 1);
|
assert_eq!(vec.len(), 1);
|
||||||
}).unwrap().join().is_ok());
|
}).unwrap().join().is_ok());
|
||||||
}
|
}
|
||||||
|
@ -8,19 +8,12 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn const_mir() -> f32 { 9007199791611905.0 }
|
fn const_mir() -> f32 { 9007199791611905.0 }
|
||||||
|
|
||||||
#[rustc_no_mir]
|
|
||||||
fn const_old() -> f32 { 9007199791611905.0 }
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let original = "9007199791611905.0"; // (1<<53)+(1<<29)+1
|
let original = "9007199791611905.0"; // (1<<53)+(1<<29)+1
|
||||||
let expected = "9007200000000000";
|
let expected = "9007200000000000";
|
||||||
|
|
||||||
assert_eq!(const_mir().to_string(), expected);
|
assert_eq!(const_mir().to_string(), expected);
|
||||||
assert_eq!(const_old().to_string(), expected);
|
|
||||||
assert_eq!(original.parse::<f32>().unwrap().to_string(), expected);
|
assert_eq!(original.parse::<f32>().unwrap().to_string(), expected);
|
||||||
}
|
}
|
||||||
|
@ -24,17 +24,14 @@ impl Foo for [u8; 2] {
|
|||||||
|
|
||||||
struct Bar<T: ?Sized>(T);
|
struct Bar<T: ?Sized>(T);
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn unsize_fat_ptr<'a>(x: &'a Bar<Foo + Send + 'a>) -> &'a Bar<Foo + 'a> {
|
fn unsize_fat_ptr<'a>(x: &'a Bar<Foo + Send + 'a>) -> &'a Bar<Foo + 'a> {
|
||||||
x
|
x
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn unsize_nested_fat_ptr(x: Arc<Foo + Send>) -> Arc<Foo> {
|
fn unsize_nested_fat_ptr(x: Arc<Foo + Send>) -> Arc<Foo> {
|
||||||
x
|
x
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let x: Box<Bar<Foo + Send>> = Box::new(Bar([1,2]));
|
let x: Box<Bar<Foo + Send>> = Box::new(Bar([1,2]));
|
||||||
assert_eq!(unsize_fat_ptr(&*x).0.get(), [1, 2]);
|
assert_eq!(unsize_fat_ptr(&*x).0.get(), [1, 2]);
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
|
|
||||||
#![feature(advanced_slice_patterns)]
|
#![feature(advanced_slice_patterns)]
|
||||||
#![feature(slice_patterns)]
|
#![feature(slice_patterns)]
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
use std::ops::Add;
|
use std::ops::Add;
|
||||||
|
|
||||||
@ -22,7 +21,6 @@ fn bar(a: &'static str, b: &'static str) -> [&'static str; 4] {
|
|||||||
[a, b, b, a]
|
[a, b, b, a]
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn main() {
|
fn main() {
|
||||||
assert_eq!(foo([1, 2, 3]), (1, 3, 6));
|
assert_eq!(foo([1, 2, 3]), (1, 3, 6));
|
||||||
|
|
||||||
|
@ -11,9 +11,7 @@
|
|||||||
|
|
||||||
#![feature(advanced_slice_patterns)]
|
#![feature(advanced_slice_patterns)]
|
||||||
#![feature(slice_patterns)]
|
#![feature(slice_patterns)]
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn match_vecs<'a, T>(l1: &'a [T], l2: &'a [T]) -> &'static str {
|
fn match_vecs<'a, T>(l1: &'a [T], l2: &'a [T]) -> &'static str {
|
||||||
match (l1, l2) {
|
match (l1, l2) {
|
||||||
(&[], &[]) => "both empty",
|
(&[], &[]) => "both empty",
|
||||||
@ -22,7 +20,6 @@ fn match_vecs<'a, T>(l1: &'a [T], l2: &'a [T]) -> &'static str {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn match_vecs_cons<'a, T>(l1: &'a [T], l2: &'a [T]) -> &'static str {
|
fn match_vecs_cons<'a, T>(l1: &'a [T], l2: &'a [T]) -> &'static str {
|
||||||
match (l1, l2) {
|
match (l1, l2) {
|
||||||
(&[], &[]) => "both empty",
|
(&[], &[]) => "both empty",
|
||||||
@ -31,7 +28,6 @@ fn match_vecs_cons<'a, T>(l1: &'a [T], l2: &'a [T]) -> &'static str {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn match_vecs_snoc<'a, T>(l1: &'a [T], l2: &'a [T]) -> &'static str {
|
fn match_vecs_snoc<'a, T>(l1: &'a [T], l2: &'a [T]) -> &'static str {
|
||||||
match (l1, l2) {
|
match (l1, l2) {
|
||||||
(&[], &[]) => "both empty",
|
(&[], &[]) => "both empty",
|
||||||
@ -40,7 +36,6 @@ fn match_vecs_snoc<'a, T>(l1: &'a [T], l2: &'a [T]) -> &'static str {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn match_nested_vecs_cons<'a, T>(l1: Option<&'a [T]>, l2: Result<&'a [T], ()>) -> &'static str {
|
fn match_nested_vecs_cons<'a, T>(l1: Option<&'a [T]>, l2: Result<&'a [T], ()>) -> &'static str {
|
||||||
match (l1, l2) {
|
match (l1, l2) {
|
||||||
(Some(&[]), Ok(&[])) => "Some(empty), Ok(empty)",
|
(Some(&[]), Ok(&[])) => "Some(empty), Ok(empty)",
|
||||||
@ -51,7 +46,6 @@ fn match_nested_vecs_cons<'a, T>(l1: Option<&'a [T]>, l2: Result<&'a [T], ()>) -
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn match_nested_vecs_snoc<'a, T>(l1: Option<&'a [T]>, l2: Result<&'a [T], ()>) -> &'static str {
|
fn match_nested_vecs_snoc<'a, T>(l1: Option<&'a [T]>, l2: Result<&'a [T], ()>) -> &'static str {
|
||||||
match (l1, l2) {
|
match (l1, l2) {
|
||||||
(Some(&[]), Ok(&[])) => "Some(empty), Ok(empty)",
|
(Some(&[]), Ok(&[])) => "Some(empty), Ok(empty)",
|
||||||
|
@ -8,15 +8,12 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
#[repr(C, u32)]
|
#[repr(C, u32)]
|
||||||
enum CEnum {
|
enum CEnum {
|
||||||
Hello = 30,
|
Hello = 30,
|
||||||
World = 60
|
World = 60
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test1(c: CEnum) -> i32 {
|
fn test1(c: CEnum) -> i32 {
|
||||||
let c2 = CEnum::Hello;
|
let c2 = CEnum::Hello;
|
||||||
match (c, c2) {
|
match (c, c2) {
|
||||||
@ -40,7 +37,6 @@ impl Drop for Pakd {
|
|||||||
fn drop(&mut self) {}
|
fn drop(&mut self) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test2() -> Pakd {
|
fn test2() -> Pakd {
|
||||||
Pakd { a: 42, b: 42, c: 42, d: 42, e: () }
|
Pakd { a: 42, b: 42, c: 42, d: 42, e: () }
|
||||||
}
|
}
|
||||||
@ -48,18 +44,15 @@ fn test2() -> Pakd {
|
|||||||
#[derive(PartialEq, Debug)]
|
#[derive(PartialEq, Debug)]
|
||||||
struct TupleLike(u64, u32);
|
struct TupleLike(u64, u32);
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test3() -> TupleLike {
|
fn test3() -> TupleLike {
|
||||||
TupleLike(42, 42)
|
TupleLike(42, 42)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test4(x: fn(u64, u32) -> TupleLike) -> (TupleLike, TupleLike) {
|
fn test4(x: fn(u64, u32) -> TupleLike) -> (TupleLike, TupleLike) {
|
||||||
let y = TupleLike;
|
let y = TupleLike;
|
||||||
(x(42, 84), y(42, 84))
|
(x(42, 84), y(42, 84))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test5(x: fn(u32) -> Option<u32>) -> (Option<u32>, Option<u32>) {
|
fn test5(x: fn(u32) -> Option<u32>) -> (Option<u32>, Option<u32>) {
|
||||||
let y = Some;
|
let y = Some;
|
||||||
(x(42), y(42))
|
(x(42), y(42))
|
||||||
|
@ -10,9 +10,8 @@
|
|||||||
|
|
||||||
// Tests that the result of type ascription has adjustments applied
|
// Tests that the result of type ascription has adjustments applied
|
||||||
|
|
||||||
#![feature(rustc_attrs, type_ascription)]
|
#![feature(type_ascription)]
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let x = [1, 2, 3];
|
let x = [1, 2, 3];
|
||||||
// The RHS should coerce to &[i32]
|
// The RHS should coerce to &[i32]
|
||||||
|
@ -8,8 +8,6 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::ops::{
|
use std::ops::{
|
||||||
AddAssign, BitAndAssign, BitOrAssign, BitXorAssign, DivAssign, MulAssign, RemAssign,
|
AddAssign, BitAndAssign, BitOrAssign, BitXorAssign, DivAssign, MulAssign, RemAssign,
|
||||||
@ -33,7 +31,6 @@ fn main() {
|
|||||||
main_mir();
|
main_mir();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn main_mir() {
|
fn main_mir() {
|
||||||
let mut x = Int(1);
|
let mut x = Int(1);
|
||||||
|
|
||||||
@ -92,91 +89,78 @@ fn main_mir() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl AddAssign for Int {
|
impl AddAssign for Int {
|
||||||
#[rustc_mir]
|
|
||||||
fn add_assign(&mut self, rhs: Int) {
|
fn add_assign(&mut self, rhs: Int) {
|
||||||
self.0 += rhs.0;
|
self.0 += rhs.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BitAndAssign for Int {
|
impl BitAndAssign for Int {
|
||||||
#[rustc_mir]
|
|
||||||
fn bitand_assign(&mut self, rhs: Int) {
|
fn bitand_assign(&mut self, rhs: Int) {
|
||||||
self.0 &= rhs.0;
|
self.0 &= rhs.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BitOrAssign for Int {
|
impl BitOrAssign for Int {
|
||||||
#[rustc_mir]
|
|
||||||
fn bitor_assign(&mut self, rhs: Int) {
|
fn bitor_assign(&mut self, rhs: Int) {
|
||||||
self.0 |= rhs.0;
|
self.0 |= rhs.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BitXorAssign for Int {
|
impl BitXorAssign for Int {
|
||||||
#[rustc_mir]
|
|
||||||
fn bitxor_assign(&mut self, rhs: Int) {
|
fn bitxor_assign(&mut self, rhs: Int) {
|
||||||
self.0 ^= rhs.0;
|
self.0 ^= rhs.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DivAssign for Int {
|
impl DivAssign for Int {
|
||||||
#[rustc_mir]
|
|
||||||
fn div_assign(&mut self, rhs: Int) {
|
fn div_assign(&mut self, rhs: Int) {
|
||||||
self.0 /= rhs.0;
|
self.0 /= rhs.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MulAssign for Int {
|
impl MulAssign for Int {
|
||||||
#[rustc_mir]
|
|
||||||
fn mul_assign(&mut self, rhs: Int) {
|
fn mul_assign(&mut self, rhs: Int) {
|
||||||
self.0 *= rhs.0;
|
self.0 *= rhs.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RemAssign for Int {
|
impl RemAssign for Int {
|
||||||
#[rustc_mir]
|
|
||||||
fn rem_assign(&mut self, rhs: Int) {
|
fn rem_assign(&mut self, rhs: Int) {
|
||||||
self.0 %= rhs.0;
|
self.0 %= rhs.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ShlAssign<u8> for Int {
|
impl ShlAssign<u8> for Int {
|
||||||
#[rustc_mir]
|
|
||||||
fn shl_assign(&mut self, rhs: u8) {
|
fn shl_assign(&mut self, rhs: u8) {
|
||||||
self.0 <<= rhs;
|
self.0 <<= rhs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ShlAssign<u16> for Int {
|
impl ShlAssign<u16> for Int {
|
||||||
#[rustc_mir]
|
|
||||||
fn shl_assign(&mut self, rhs: u16) {
|
fn shl_assign(&mut self, rhs: u16) {
|
||||||
self.0 <<= rhs;
|
self.0 <<= rhs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ShrAssign<u8> for Int {
|
impl ShrAssign<u8> for Int {
|
||||||
#[rustc_mir]
|
|
||||||
fn shr_assign(&mut self, rhs: u8) {
|
fn shr_assign(&mut self, rhs: u8) {
|
||||||
self.0 >>= rhs;
|
self.0 >>= rhs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ShrAssign<u16> for Int {
|
impl ShrAssign<u16> for Int {
|
||||||
#[rustc_mir]
|
|
||||||
fn shr_assign(&mut self, rhs: u16) {
|
fn shr_assign(&mut self, rhs: u16) {
|
||||||
self.0 >>= rhs;
|
self.0 >>= rhs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SubAssign for Int {
|
impl SubAssign for Int {
|
||||||
#[rustc_mir]
|
|
||||||
fn sub_assign(&mut self, rhs: Int) {
|
fn sub_assign(&mut self, rhs: Int) {
|
||||||
self.0 -= rhs.0;
|
self.0 -= rhs.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AddAssign<i32> for Slice {
|
impl AddAssign<i32> for Slice {
|
||||||
#[rustc_mir]
|
|
||||||
fn add_assign(&mut self, rhs: i32) {
|
fn add_assign(&mut self, rhs: i32) {
|
||||||
for lhs in &mut self.0 {
|
for lhs in &mut self.0 {
|
||||||
*lhs += rhs;
|
*lhs += rhs;
|
||||||
|
@ -8,8 +8,6 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
use std::ops::{Deref, DerefMut};
|
use std::ops::{Deref, DerefMut};
|
||||||
|
|
||||||
pub struct MyRef(u32);
|
pub struct MyRef(u32);
|
||||||
@ -24,12 +22,10 @@ impl DerefMut for MyRef {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn deref(x: &MyRef) -> &u32 {
|
fn deref(x: &MyRef) -> &u32 {
|
||||||
x
|
x
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn deref_mut(x: &mut MyRef) -> &mut u32 {
|
fn deref_mut(x: &mut MyRef) -> &mut u32 {
|
||||||
x
|
x
|
||||||
}
|
}
|
||||||
|
@ -8,9 +8,8 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs, box_syntax)]
|
#![feature(box_syntax)]
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test() -> Box<i32> {
|
fn test() -> Box<i32> {
|
||||||
box 42
|
box 42
|
||||||
}
|
}
|
||||||
|
@ -8,9 +8,6 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test1(x: i8) -> i32 {
|
fn test1(x: i8) -> i32 {
|
||||||
match x {
|
match x {
|
||||||
1...10 => 0,
|
1...10 => 0,
|
||||||
@ -21,7 +18,6 @@ fn test1(x: i8) -> i32 {
|
|||||||
const U: Option<i8> = Some(10);
|
const U: Option<i8> = Some(10);
|
||||||
const S: &'static str = "hello";
|
const S: &'static str = "hello";
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test2(x: i8) -> i32 {
|
fn test2(x: i8) -> i32 {
|
||||||
match Some(x) {
|
match Some(x) {
|
||||||
U => 0,
|
U => 0,
|
||||||
@ -29,7 +25,6 @@ fn test2(x: i8) -> i32 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test3(x: &'static str) -> i32 {
|
fn test3(x: &'static str) -> i32 {
|
||||||
match x {
|
match x {
|
||||||
S => 0,
|
S => 0,
|
||||||
@ -42,7 +37,6 @@ enum Opt<T> {
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test4(x: u64) -> i32 {
|
fn test4(x: u64) -> i32 {
|
||||||
let opt = Opt::Some{ v: x };
|
let opt = Opt::Some{ v: x };
|
||||||
match opt {
|
match opt {
|
||||||
|
@ -8,8 +8,6 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
trait Trait {
|
trait Trait {
|
||||||
type Type;
|
type Type;
|
||||||
}
|
}
|
||||||
@ -18,12 +16,10 @@ impl<'a> Trait for &'a () {
|
|||||||
type Type = u32;
|
type Type = u32;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn foo<'a>(t: <&'a () as Trait>::Type) -> <&'a () as Trait>::Type {
|
fn foo<'a>(t: <&'a () as Trait>::Type) -> <&'a () as Trait>::Type {
|
||||||
t
|
t
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn main() {
|
fn main() {
|
||||||
assert_eq!(foo(4), 4);
|
assert_eq!(foo(4), 4);
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,6 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
pub extern "C" fn tuple2() -> (u16, u8) {
|
pub extern "C" fn tuple2() -> (u16, u8) {
|
||||||
(1, 2)
|
(1, 2)
|
||||||
}
|
}
|
||||||
@ -18,12 +16,10 @@ pub extern "C" fn tuple3() -> (u8, u8, u8) {
|
|||||||
(1, 2, 3)
|
(1, 2, 3)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
pub fn test2() -> u8 {
|
pub fn test2() -> u8 {
|
||||||
tuple2().1
|
tuple2().1
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
pub fn test3() -> u8 {
|
pub fn test3() -> u8 {
|
||||||
tuple3().2
|
tuple3().2
|
||||||
}
|
}
|
||||||
|
@ -10,9 +10,6 @@
|
|||||||
|
|
||||||
// Tests the coercion casts are handled properly
|
// Tests the coercion casts are handled properly
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn main() {
|
fn main() {
|
||||||
// This should produce only a reification of f,
|
// This should produce only a reification of f,
|
||||||
// not a fn -> fn cast as well
|
// not a fn -> fn cast as well
|
||||||
|
@ -8,16 +8,14 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs, coerce_unsized, unsize)]
|
#![feature(coerce_unsized, unsize)]
|
||||||
|
|
||||||
use std::ops::CoerceUnsized;
|
use std::ops::CoerceUnsized;
|
||||||
use std::marker::Unsize;
|
use std::marker::Unsize;
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn identity_coercion(x: &(Fn(u32)->u32 + Send)) -> &Fn(u32)->u32 {
|
fn identity_coercion(x: &(Fn(u32)->u32 + Send)) -> &Fn(u32)->u32 {
|
||||||
x
|
x
|
||||||
}
|
}
|
||||||
#[rustc_mir]
|
|
||||||
fn fn_coercions(f: &fn(u32) -> u32) ->
|
fn fn_coercions(f: &fn(u32) -> u32) ->
|
||||||
(unsafe fn(u32) -> u32,
|
(unsafe fn(u32) -> u32,
|
||||||
&(Fn(u32) -> u32+Send))
|
&(Fn(u32) -> u32+Send))
|
||||||
@ -25,7 +23,6 @@ fn fn_coercions(f: &fn(u32) -> u32) ->
|
|||||||
(*f, f)
|
(*f, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn simple_array_coercion(x: &[u8; 3]) -> &[u8] { x }
|
fn simple_array_coercion(x: &[u8; 3]) -> &[u8] { x }
|
||||||
|
|
||||||
fn square(a: u32) -> u32 { a * a }
|
fn square(a: u32) -> u32 { a * a }
|
||||||
@ -39,23 +36,19 @@ struct TrivPtrWrapper<'a, T: 'a+?Sized>(&'a T);
|
|||||||
impl<'a, T: ?Sized+Unsize<U>, U: ?Sized>
|
impl<'a, T: ?Sized+Unsize<U>, U: ?Sized>
|
||||||
CoerceUnsized<TrivPtrWrapper<'a, U>> for TrivPtrWrapper<'a, T> {}
|
CoerceUnsized<TrivPtrWrapper<'a, U>> for TrivPtrWrapper<'a, T> {}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn coerce_ptr_wrapper(p: PtrWrapper<[u8; 3]>) -> PtrWrapper<[u8]> {
|
fn coerce_ptr_wrapper(p: PtrWrapper<[u8; 3]>) -> PtrWrapper<[u8]> {
|
||||||
p
|
p
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn coerce_triv_ptr_wrapper(p: TrivPtrWrapper<[u8; 3]>) -> TrivPtrWrapper<[u8]> {
|
fn coerce_triv_ptr_wrapper(p: TrivPtrWrapper<[u8; 3]>) -> TrivPtrWrapper<[u8]> {
|
||||||
p
|
p
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn coerce_fat_ptr_wrapper(p: PtrWrapper<Fn(u32) -> u32+Send>)
|
fn coerce_fat_ptr_wrapper(p: PtrWrapper<Fn(u32) -> u32+Send>)
|
||||||
-> PtrWrapper<Fn(u32) -> u32> {
|
-> PtrWrapper<Fn(u32) -> u32> {
|
||||||
p
|
p
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn coerce_ptr_wrapper_poly<'a, T, Trait: ?Sized>(p: PtrWrapper<'a, T>)
|
fn coerce_ptr_wrapper_poly<'a, T, Trait: ?Sized>(p: PtrWrapper<'a, T>)
|
||||||
-> PtrWrapper<'a, Trait>
|
-> PtrWrapper<'a, Trait>
|
||||||
where PtrWrapper<'a, T>: CoerceUnsized<PtrWrapper<'a, Trait>>
|
where PtrWrapper<'a, T>: CoerceUnsized<PtrWrapper<'a, Trait>>
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
#[derive(PartialEq, Debug)]
|
#[derive(PartialEq, Debug)]
|
||||||
struct Point {
|
struct Point {
|
||||||
@ -23,7 +22,6 @@ const TUPLE1: (i32, i32) = (42, 42);
|
|||||||
const TUPLE2: (&'static str, &'static str) = ("hello","world");
|
const TUPLE2: (&'static str, &'static str) = ("hello","world");
|
||||||
const PAIR_NEWTYPE: (Newtype<i32>, Newtype<i32>) = (Newtype(42), Newtype(42));
|
const PAIR_NEWTYPE: (Newtype<i32>, Newtype<i32>) = (Newtype(42), Newtype(42));
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn mir() -> (Point, (i32, i32), (&'static str, &'static str), (Newtype<i32>, Newtype<i32>)) {
|
fn mir() -> (Point, (i32, i32), (&'static str, &'static str), (Newtype<i32>, Newtype<i32>)) {
|
||||||
let struct1 = STRUCT;
|
let struct1 = STRUCT;
|
||||||
let tuple1 = TUPLE1;
|
let tuple1 = TUPLE1;
|
||||||
@ -34,7 +32,6 @@ fn mir() -> (Point, (i32, i32), (&'static str, &'static str), (Newtype<i32>, New
|
|||||||
|
|
||||||
const NEWTYPE: Newtype<&'static str> = Newtype("foobar");
|
const NEWTYPE: Newtype<&'static str> = Newtype("foobar");
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test_promoted_newtype_str_ref() {
|
fn test_promoted_newtype_str_ref() {
|
||||||
let x = &NEWTYPE;
|
let x = &NEWTYPE;
|
||||||
assert_eq!(x, &Newtype("foobar"));
|
assert_eq!(x, &Newtype("foobar"));
|
||||||
|
@ -8,8 +8,7 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// compile-flags: -Z orbit
|
// Tests that MIR trans is used for functions from other crates.
|
||||||
// Tests that -Z orbit affects functions from other crates.
|
|
||||||
|
|
||||||
#![feature(unsafe_no_drop_flag)]
|
#![feature(unsafe_no_drop_flag)]
|
||||||
|
|
||||||
|
@ -10,46 +10,37 @@
|
|||||||
|
|
||||||
// test that ordinary fat pointer operations work.
|
// test that ordinary fat pointer operations work.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
struct Wrapper<T: ?Sized>(u32, T);
|
struct Wrapper<T: ?Sized>(u32, T);
|
||||||
|
|
||||||
struct FatPtrContainer<'a> {
|
struct FatPtrContainer<'a> {
|
||||||
ptr: &'a [u8]
|
ptr: &'a [u8]
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn fat_ptr_project(a: &Wrapper<[u8]>) -> &[u8] {
|
fn fat_ptr_project(a: &Wrapper<[u8]>) -> &[u8] {
|
||||||
&a.1
|
&a.1
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn fat_ptr_simple(a: &[u8]) -> &[u8] {
|
fn fat_ptr_simple(a: &[u8]) -> &[u8] {
|
||||||
a
|
a
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn fat_ptr_via_local(a: &[u8]) -> &[u8] {
|
fn fat_ptr_via_local(a: &[u8]) -> &[u8] {
|
||||||
let x = a;
|
let x = a;
|
||||||
x
|
x
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn fat_ptr_from_struct(s: FatPtrContainer) -> &[u8] {
|
fn fat_ptr_from_struct(s: FatPtrContainer) -> &[u8] {
|
||||||
s.ptr
|
s.ptr
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn fat_ptr_to_struct(a: &[u8]) -> FatPtrContainer {
|
fn fat_ptr_to_struct(a: &[u8]) -> FatPtrContainer {
|
||||||
FatPtrContainer { ptr: a }
|
FatPtrContainer { ptr: a }
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn fat_ptr_store_to<'a>(a: &'a [u8], b: &mut &'a [u8]) {
|
fn fat_ptr_store_to<'a>(a: &'a [u8], b: &mut &'a [u8]) {
|
||||||
*b = a;
|
*b = a;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn fat_ptr_constant() -> &'static str {
|
fn fat_ptr_constant() -> &'static str {
|
||||||
"HELLO"
|
"HELLO"
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,6 @@ impl Drop for DropMe {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn fat_ptr_move_then_drop(a: Box<[DropMe]>) {
|
fn fat_ptr_move_then_drop(a: Box<[DropMe]>) {
|
||||||
let b = a;
|
let b = a;
|
||||||
}
|
}
|
||||||
|
@ -10,9 +10,6 @@
|
|||||||
|
|
||||||
// #30527 - We were not generating arms with guards in certain cases.
|
// #30527 - We were not generating arms with guards in certain cases.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn match_with_guard(x: Option<i8>) -> i8 {
|
fn match_with_guard(x: Option<i8>) -> i8 {
|
||||||
match x {
|
match x {
|
||||||
Some(xyz) if xyz > 100 => 0,
|
Some(xyz) if xyz > 100 => 0,
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(libc, rustc_attrs)]
|
#![feature(libc)]
|
||||||
|
|
||||||
extern crate libc;
|
extern crate libc;
|
||||||
|
|
||||||
@ -17,7 +17,6 @@ fn func(){}
|
|||||||
const STR: &'static str = "hello";
|
const STR: &'static str = "hello";
|
||||||
const BSTR: &'static [u8; 5] = b"hello";
|
const BSTR: &'static [u8; 5] = b"hello";
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn from_ptr()
|
fn from_ptr()
|
||||||
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, *const ()) {
|
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, *const ()) {
|
||||||
let f = 1_usize as *const libc::FILE;
|
let f = 1_usize as *const libc::FILE;
|
||||||
@ -35,7 +34,6 @@ fn from_ptr()
|
|||||||
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11)
|
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn from_1()
|
fn from_1()
|
||||||
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
||||||
let c1 = 1 as isize;
|
let c1 = 1 as isize;
|
||||||
@ -54,7 +52,6 @@ fn from_1()
|
|||||||
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn from_1usize()
|
fn from_1usize()
|
||||||
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
||||||
let c1 = 1_usize as isize;
|
let c1 = 1_usize as isize;
|
||||||
@ -73,7 +70,6 @@ fn from_1usize()
|
|||||||
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn from_1isize()
|
fn from_1isize()
|
||||||
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
||||||
let c1 = 1_isize as isize;
|
let c1 = 1_isize as isize;
|
||||||
@ -92,7 +88,6 @@ fn from_1isize()
|
|||||||
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn from_1u8()
|
fn from_1u8()
|
||||||
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
||||||
let c1 = 1_u8 as isize;
|
let c1 = 1_u8 as isize;
|
||||||
@ -111,7 +106,6 @@ fn from_1u8()
|
|||||||
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn from_1i8()
|
fn from_1i8()
|
||||||
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
||||||
let c1 = 1_i8 as isize;
|
let c1 = 1_i8 as isize;
|
||||||
@ -130,7 +124,6 @@ fn from_1i8()
|
|||||||
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn from_1u16()
|
fn from_1u16()
|
||||||
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
||||||
let c1 = 1_u16 as isize;
|
let c1 = 1_u16 as isize;
|
||||||
@ -149,7 +142,6 @@ fn from_1u16()
|
|||||||
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn from_1i16()
|
fn from_1i16()
|
||||||
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
||||||
let c1 = 1_i16 as isize;
|
let c1 = 1_i16 as isize;
|
||||||
@ -168,7 +160,6 @@ fn from_1i16()
|
|||||||
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn from_1u32()
|
fn from_1u32()
|
||||||
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
||||||
let c1 = 1_u32 as isize;
|
let c1 = 1_u32 as isize;
|
||||||
@ -187,7 +178,6 @@ fn from_1u32()
|
|||||||
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn from_1i32()
|
fn from_1i32()
|
||||||
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
||||||
let c1 = 1_i32 as isize;
|
let c1 = 1_i32 as isize;
|
||||||
@ -206,7 +196,6 @@ fn from_1i32()
|
|||||||
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn from_1u64()
|
fn from_1u64()
|
||||||
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
||||||
let c1 = 1_u64 as isize;
|
let c1 = 1_u64 as isize;
|
||||||
@ -225,7 +214,6 @@ fn from_1u64()
|
|||||||
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn from_1i64()
|
fn from_1i64()
|
||||||
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
|
||||||
let c1 = 1_i64 as isize;
|
let c1 = 1_i64 as isize;
|
||||||
@ -244,7 +232,6 @@ fn from_1i64()
|
|||||||
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn from_bool()
|
fn from_bool()
|
||||||
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64) {
|
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64) {
|
||||||
let c1 = true as isize;
|
let c1 = true as isize;
|
||||||
@ -260,7 +247,6 @@ fn from_bool()
|
|||||||
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10)
|
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn from_1f32()
|
fn from_1f32()
|
||||||
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64) {
|
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64) {
|
||||||
let c1 = 1.0_f32 as isize;
|
let c1 = 1.0_f32 as isize;
|
||||||
@ -278,7 +264,6 @@ fn from_1f32()
|
|||||||
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12)
|
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn from_1f64()
|
fn from_1f64()
|
||||||
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64) {
|
-> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64) {
|
||||||
let c1 = 1.0f64 as isize;
|
let c1 = 1.0f64 as isize;
|
||||||
@ -296,7 +281,6 @@ fn from_1f64()
|
|||||||
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12)
|
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn other_casts()
|
fn other_casts()
|
||||||
-> (*const u8, *const isize, *const u8, *const u8) {
|
-> (*const u8, *const isize, *const u8, *const u8) {
|
||||||
let c1 = func as *const u8;
|
let c1 = func as *const u8;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// compile-flags: -Z force-overflow-checks=off -Z orbit
|
// compile-flags: -Z force-overflow-checks=off
|
||||||
|
|
||||||
// Test that with MIR trans, overflow checks can be
|
// Test that with MIR trans, overflow checks can be
|
||||||
// turned off, even when they're from core::ops::*.
|
// turned off, even when they're from core::ops::*.
|
||||||
|
@ -8,8 +8,6 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
// ignore-pretty : (#23623) problems when ending with // comments
|
// ignore-pretty : (#23623) problems when ending with // comments
|
||||||
|
|
||||||
// check raw fat pointer ops in mir
|
// check raw fat pointer ops in mir
|
||||||
@ -54,7 +52,6 @@ const GT: ComparisonResults = ComparisonResults {
|
|||||||
ne: true
|
ne: true
|
||||||
};
|
};
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn compare_su8(a: *const S<[u8]>, b: *const S<[u8]>) -> ComparisonResults {
|
fn compare_su8(a: *const S<[u8]>, b: *const S<[u8]>) -> ComparisonResults {
|
||||||
ComparisonResults {
|
ComparisonResults {
|
||||||
lt: a < b,
|
lt: a < b,
|
||||||
@ -66,7 +63,6 @@ fn compare_su8(a: *const S<[u8]>, b: *const S<[u8]>) -> ComparisonResults {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn compare_au8(a: *const [u8], b: *const [u8]) -> ComparisonResults {
|
fn compare_au8(a: *const [u8], b: *const [u8]) -> ComparisonResults {
|
||||||
ComparisonResults {
|
ComparisonResults {
|
||||||
lt: a < b,
|
lt: a < b,
|
||||||
@ -78,7 +74,6 @@ fn compare_au8(a: *const [u8], b: *const [u8]) -> ComparisonResults {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn compare_foo<'a>(a: *const (Foo+'a), b: *const (Foo+'a)) -> ComparisonResults {
|
fn compare_foo<'a>(a: *const (Foo+'a), b: *const (Foo+'a)) -> ComparisonResults {
|
||||||
ComparisonResults {
|
ComparisonResults {
|
||||||
lt: a < b,
|
lt: a < b,
|
||||||
@ -90,7 +85,6 @@ fn compare_foo<'a>(a: *const (Foo+'a), b: *const (Foo+'a)) -> ComparisonResults
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn simple_eq<'a>(a: *const (Foo+'a), b: *const (Foo+'a)) -> bool {
|
fn simple_eq<'a>(a: *const (Foo+'a), b: *const (Foo+'a)) -> bool {
|
||||||
let result = a == b;
|
let result = a == b;
|
||||||
result
|
result
|
||||||
|
@ -7,9 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
// aux-build:mir_external_refs.rs
|
|
||||||
|
|
||||||
|
// aux-build:mir_external_refs.rs
|
||||||
|
|
||||||
extern crate mir_external_refs as ext;
|
extern crate mir_external_refs as ext;
|
||||||
|
|
||||||
@ -78,128 +77,103 @@ fn parametric<T>(u: T) -> T {
|
|||||||
u
|
u
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t1() -> fn()->u8 {
|
fn t1() -> fn()->u8 {
|
||||||
regular
|
regular
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t2() -> fn(u8)->E {
|
fn t2() -> fn(u8)->E {
|
||||||
E::U
|
E::U
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t3() -> fn(u8)->S {
|
fn t3() -> fn(u8)->S {
|
||||||
S
|
S
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t4() -> fn()->u8 {
|
fn t4() -> fn()->u8 {
|
||||||
S::hey
|
S::hey
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t5() -> fn(&S)-> u8 {
|
fn t5() -> fn(&S)-> u8 {
|
||||||
<S as X>::hoy
|
<S as X>::hoy
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t6() -> fn()->u8{
|
fn t6() -> fn()->u8{
|
||||||
ext::regular_fn
|
ext::regular_fn
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t7() -> fn(u8)->ext::E {
|
fn t7() -> fn(u8)->ext::E {
|
||||||
ext::E::U
|
ext::E::U
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t8() -> fn(u8)->ext::S {
|
fn t8() -> fn(u8)->ext::S {
|
||||||
ext::S
|
ext::S
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t9() -> fn()->u8 {
|
fn t9() -> fn()->u8 {
|
||||||
ext::S::hey
|
ext::S::hey
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t10() -> fn(&ext::S)->u8 {
|
fn t10() -> fn(&ext::S)->u8 {
|
||||||
<ext::S as ext::X>::hoy
|
<ext::S as ext::X>::hoy
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t11() -> fn(u8)->u8 {
|
fn t11() -> fn(u8)->u8 {
|
||||||
parametric
|
parametric
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t12() -> u8 {
|
fn t12() -> u8 {
|
||||||
C
|
C
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t13() -> [u8; 5] {
|
fn t13() -> [u8; 5] {
|
||||||
C2
|
C2
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t13_2() -> [u8; 3] {
|
fn t13_2() -> [u8; 3] {
|
||||||
C3
|
C3
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t14() -> fn()-> u8 {
|
fn t14() -> fn()-> u8 {
|
||||||
<S as X>::hoy2
|
<S as X>::hoy2
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t15() -> fn(&S)-> u8 {
|
fn t15() -> fn(&S)-> u8 {
|
||||||
S::hey2
|
S::hey2
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t16() -> fn(u32, u32)->u64 {
|
fn t16() -> fn(u32, u32)->u64 {
|
||||||
F::f
|
F::f
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t17() -> fn(u32, u64)->u64 {
|
fn t17() -> fn(u32, u64)->u64 {
|
||||||
F::f
|
F::f
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t18() -> fn(u64, u64)->u64 {
|
fn t18() -> fn(u64, u64)->u64 {
|
||||||
F::f
|
F::f
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t19() -> fn(u64, u32)->u64 {
|
fn t19() -> fn(u64, u32)->u64 {
|
||||||
F::f
|
F::f
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t20() -> fn(u64, u32)->(u64, u32) {
|
fn t20() -> fn(u64, u32)->(u64, u32) {
|
||||||
<u32 as T<_, _>>::staticmeth
|
<u32 as T<_, _>>::staticmeth
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t21() -> Unit {
|
fn t21() -> Unit {
|
||||||
Unit
|
Unit
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t22() -> Option<u8> {
|
fn t22() -> Option<u8> {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t23() -> (CEnum, CEnum) {
|
fn t23() -> (CEnum, CEnum) {
|
||||||
(CEnum::A, CEnum::B)
|
(CEnum::A, CEnum::B)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn t24() -> fn(u8) -> S {
|
fn t24() -> fn(u8) -> S {
|
||||||
C4
|
C4
|
||||||
}
|
}
|
||||||
|
@ -8,9 +8,6 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn foo((x, y): (i8, i8)) {
|
fn foo((x, y): (i8, i8)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,8 +8,6 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
|
|
||||||
pub trait DataBind {
|
pub trait DataBind {
|
||||||
@ -26,7 +24,6 @@ pub struct Data {
|
|||||||
pub offsets: <Global<[u32; 2]> as DataBind>::Data,
|
pub offsets: <Global<[u32; 2]> as DataBind>::Data,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn create_data() -> Data {
|
fn create_data() -> Data {
|
||||||
let mut d = Data { offsets: [1, 2] };
|
let mut d = Data { offsets: [1, 2] };
|
||||||
d.offsets[0] = 3;
|
d.offsets[0] = 3;
|
||||||
|
@ -8,9 +8,6 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test1(f: f32) -> bool {
|
fn test1(f: f32) -> bool {
|
||||||
// test that we properly promote temporaries to allocas when a temporary is assigned to
|
// test that we properly promote temporaries to allocas when a temporary is assigned to
|
||||||
// multiple times (assignment is still happening once ∀ possible dataflows).
|
// multiple times (assignment is still happening once ∀ possible dataflows).
|
||||||
|
@ -7,9 +7,7 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn into_inner() -> [u64; 1024] {
|
fn into_inner() -> [u64; 1024] {
|
||||||
let mut x = 10 + 20;
|
let mut x = 10 + 20;
|
||||||
[x; 1024]
|
[x; 1024]
|
||||||
|
@ -7,9 +7,7 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn into_inner(x: u64) -> [u64; 1024] {
|
fn into_inner(x: u64) -> [u64; 1024] {
|
||||||
[x; 2*4*8*16]
|
[x; 2*4*8*16]
|
||||||
}
|
}
|
||||||
|
@ -7,13 +7,11 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
fn converging_fn() -> u64 {
|
fn converging_fn() -> u64 {
|
||||||
43
|
43
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn mir() -> u64 {
|
fn mir() -> u64 {
|
||||||
let x;
|
let x;
|
||||||
loop {
|
loop {
|
||||||
|
@ -8,9 +8,8 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs, fn_traits)]
|
#![feature(fn_traits)]
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test1(a: isize, b: (i32, i32), c: &[i32]) -> (isize, (i32, i32), &[i32]) {
|
fn test1(a: isize, b: (i32, i32), c: &[i32]) -> (isize, (i32, i32), &[i32]) {
|
||||||
// Test passing a number of arguments including a fat pointer.
|
// Test passing a number of arguments including a fat pointer.
|
||||||
// Also returning via an out pointer
|
// Also returning via an out pointer
|
||||||
@ -20,7 +19,6 @@ fn test1(a: isize, b: (i32, i32), c: &[i32]) -> (isize, (i32, i32), &[i32]) {
|
|||||||
callee(a, b, c)
|
callee(a, b, c)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test2(a: isize) -> isize {
|
fn test2(a: isize) -> isize {
|
||||||
// Test passing a single argument.
|
// Test passing a single argument.
|
||||||
// Not using out pointer.
|
// Not using out pointer.
|
||||||
@ -36,7 +34,6 @@ impl Foo {
|
|||||||
fn inherent_method(&self, a: isize) -> isize { a }
|
fn inherent_method(&self, a: isize) -> isize { a }
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test3(x: &Foo, a: isize) -> isize {
|
fn test3(x: &Foo, a: isize) -> isize {
|
||||||
// Test calling inherent method
|
// Test calling inherent method
|
||||||
x.inherent_method(a)
|
x.inherent_method(a)
|
||||||
@ -47,19 +44,16 @@ trait Bar {
|
|||||||
}
|
}
|
||||||
impl Bar for Foo {}
|
impl Bar for Foo {}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test4(x: &Foo, a: isize) -> isize {
|
fn test4(x: &Foo, a: isize) -> isize {
|
||||||
// Test calling extension method
|
// Test calling extension method
|
||||||
x.extension_method(a)
|
x.extension_method(a)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test5(x: &Bar, a: isize) -> isize {
|
fn test5(x: &Bar, a: isize) -> isize {
|
||||||
// Test calling method on trait object
|
// Test calling method on trait object
|
||||||
x.extension_method(a)
|
x.extension_method(a)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test6<T: Bar>(x: &T, a: isize) -> isize {
|
fn test6<T: Bar>(x: &T, a: isize) -> isize {
|
||||||
// Test calling extension method on generic callee
|
// Test calling extension method on generic callee
|
||||||
x.extension_method(a)
|
x.extension_method(a)
|
||||||
@ -72,7 +66,6 @@ impl One for isize {
|
|||||||
fn one() -> isize { 1 }
|
fn one() -> isize { 1 }
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test7() -> isize {
|
fn test7() -> isize {
|
||||||
// Test calling trait static method
|
// Test calling trait static method
|
||||||
<isize as One>::one()
|
<isize as One>::one()
|
||||||
@ -83,7 +76,6 @@ impl Two {
|
|||||||
fn two() -> isize { 2 }
|
fn two() -> isize { 2 }
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test8() -> isize {
|
fn test8() -> isize {
|
||||||
// Test calling impl static method
|
// Test calling impl static method
|
||||||
Two::two()
|
Two::two()
|
||||||
@ -93,24 +85,20 @@ extern fn simple_extern(x: u32, y: (u32, u32)) -> u32 {
|
|||||||
x + y.0 * y.1
|
x + y.0 * y.1
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test9() -> u32 {
|
fn test9() -> u32 {
|
||||||
simple_extern(41, (42, 43))
|
simple_extern(41, (42, 43))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test_closure<F>(f: &F, x: i32, y: i32) -> i32
|
fn test_closure<F>(f: &F, x: i32, y: i32) -> i32
|
||||||
where F: Fn(i32, i32) -> i32
|
where F: Fn(i32, i32) -> i32
|
||||||
{
|
{
|
||||||
f(x, y)
|
f(x, y)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test_fn_object(f: &Fn(i32, i32) -> i32, x: i32, y: i32) -> i32 {
|
fn test_fn_object(f: &Fn(i32, i32) -> i32, x: i32, y: i32) -> i32 {
|
||||||
f(x, y)
|
f(x, y)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test_fn_impl(f: &&Fn(i32, i32) -> i32, x: i32, y: i32) -> i32 {
|
fn test_fn_impl(f: &&Fn(i32, i32) -> i32, x: i32, y: i32) -> i32 {
|
||||||
// This call goes through the Fn implementation for &Fn provided in
|
// This call goes through the Fn implementation for &Fn provided in
|
||||||
// core::ops::impls. It expands to a static Fn::call() that calls the
|
// core::ops::impls. It expands to a static Fn::call() that calls the
|
||||||
@ -118,28 +106,24 @@ fn test_fn_impl(f: &&Fn(i32, i32) -> i32, x: i32, y: i32) -> i32 {
|
|||||||
f(x, y)
|
f(x, y)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test_fn_direct_call<F>(f: &F, x: i32, y: i32) -> i32
|
fn test_fn_direct_call<F>(f: &F, x: i32, y: i32) -> i32
|
||||||
where F: Fn(i32, i32) -> i32
|
where F: Fn(i32, i32) -> i32
|
||||||
{
|
{
|
||||||
f.call((x, y))
|
f.call((x, y))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test_fn_const_call<F>(f: &F) -> i32
|
fn test_fn_const_call<F>(f: &F) -> i32
|
||||||
where F: Fn(i32, i32) -> i32
|
where F: Fn(i32, i32) -> i32
|
||||||
{
|
{
|
||||||
f.call((100, -1))
|
f.call((100, -1))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test_fn_nil_call<F>(f: &F) -> i32
|
fn test_fn_nil_call<F>(f: &F) -> i32
|
||||||
where F: Fn() -> i32
|
where F: Fn() -> i32
|
||||||
{
|
{
|
||||||
f()
|
f()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test_fn_transmute_zst(x: ()) -> [(); 1] {
|
fn test_fn_transmute_zst(x: ()) -> [(); 1] {
|
||||||
fn id<T>(x: T) -> T {x}
|
fn id<T>(x: T) -> T {x}
|
||||||
|
|
||||||
@ -148,30 +132,24 @@ fn test_fn_transmute_zst(x: ()) -> [(); 1] {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test_fn_ignored_pair() -> ((), ()) {
|
fn test_fn_ignored_pair() -> ((), ()) {
|
||||||
((), ())
|
((), ())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test_fn_ignored_pair_0() {
|
fn test_fn_ignored_pair_0() {
|
||||||
test_fn_ignored_pair().0
|
test_fn_ignored_pair().0
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn id<T>(x: T) -> T { x }
|
fn id<T>(x: T) -> T { x }
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn ignored_pair_named() -> (Foo, Foo) {
|
fn ignored_pair_named() -> (Foo, Foo) {
|
||||||
(Foo, Foo)
|
(Foo, Foo)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test_fn_ignored_pair_named() -> (Foo, Foo) {
|
fn test_fn_ignored_pair_named() -> (Foo, Foo) {
|
||||||
id(ignored_pair_named())
|
id(ignored_pair_named())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test_fn_nested_pair(x: &((f32, f32), u32)) -> (f32, f32) {
|
fn test_fn_nested_pair(x: &((f32, f32), u32)) -> (f32, f32) {
|
||||||
let y = *x;
|
let y = *x;
|
||||||
let z = y.0;
|
let z = y.0;
|
||||||
|
@ -8,14 +8,11 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
#[link(name = "rust_test_helpers")]
|
#[link(name = "rust_test_helpers")]
|
||||||
extern {
|
extern {
|
||||||
fn rust_interesting_average(_: i64, ...) -> f64;
|
fn rust_interesting_average(_: i64, ...) -> f64;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn test<T, U>(a: i64, b: i64, c: i64, d: i64, e: i64, f: T, g: U) -> i64 {
|
fn test<T, U>(a: i64, b: i64, c: i64, d: i64, e: i64, f: T, g: U) -> i64 {
|
||||||
unsafe {
|
unsafe {
|
||||||
rust_interesting_average(6, a, a as f64,
|
rust_interesting_average(6, a, a as f64,
|
||||||
|
@ -29,7 +29,6 @@ impl<A, B> Foo<A, B>
|
|||||||
where A: Iterator, B: Iterator<Item=A::Item>
|
where A: Iterator, B: Iterator<Item=A::Item>
|
||||||
{
|
{
|
||||||
// This is the function we care about
|
// This is the function we care about
|
||||||
#[rustc_mir]
|
|
||||||
fn next(&mut self) -> Option<A::Item> {
|
fn next(&mut self) -> Option<A::Item> {
|
||||||
match self.state {
|
match self.state {
|
||||||
State::Both => match self.a.next() {
|
State::Both => match self.a.next() {
|
||||||
|
@ -10,9 +10,6 @@
|
|||||||
|
|
||||||
// A simple spike test for MIR version of trans.
|
// A simple spike test for MIR version of trans.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn sum(x: i32, y: i32) -> i32 {
|
fn sum(x: i32, y: i32) -> i32 {
|
||||||
x + y
|
x + y
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,6 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
enum Abc {
|
enum Abc {
|
||||||
A(u8),
|
A(u8),
|
||||||
B(i8),
|
B(i8),
|
||||||
@ -17,7 +15,6 @@ enum Abc {
|
|||||||
D,
|
D,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn foo(x: Abc) -> i32 {
|
fn foo(x: Abc) -> i32 {
|
||||||
match x {
|
match x {
|
||||||
Abc::C => 3,
|
Abc::C => 3,
|
||||||
@ -27,7 +24,6 @@ fn foo(x: Abc) -> i32 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn foo2(x: Abc) -> bool {
|
fn foo2(x: Abc) -> bool {
|
||||||
match x {
|
match x {
|
||||||
Abc::D => true,
|
Abc::D => true,
|
||||||
|
@ -8,9 +8,6 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
pub fn foo(x: i8) -> i32 {
|
pub fn foo(x: i8) -> i32 {
|
||||||
match x {
|
match x {
|
||||||
1 => 0,
|
1 => 0,
|
||||||
|
@ -8,9 +8,6 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn mir() -> (){
|
fn mir() -> (){
|
||||||
let x = 1;
|
let x = 1;
|
||||||
let mut y = 0;
|
let mut y = 0;
|
||||||
|
@ -8,11 +8,8 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
fn nil() {}
|
fn nil() {}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn mir(){
|
fn mir(){
|
||||||
nil()
|
nil()
|
||||||
}
|
}
|
||||||
|
@ -11,11 +11,9 @@
|
|||||||
|
|
||||||
#![feature(advanced_slice_patterns)]
|
#![feature(advanced_slice_patterns)]
|
||||||
#![feature(slice_patterns)]
|
#![feature(slice_patterns)]
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
|
|
||||||
#[rustc_mir(graphviz="mir.gv")]
|
|
||||||
fn foldl<T, U, F>(values: &[T],
|
fn foldl<T, U, F>(values: &[T],
|
||||||
initial: U,
|
initial: U,
|
||||||
mut function: F)
|
mut function: F)
|
||||||
@ -32,7 +30,6 @@ fn foldl<T, U, F>(values: &[T],
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn foldr<T, U, F>(values: &[T],
|
fn foldr<T, U, F>(values: &[T],
|
||||||
initial: U,
|
initial: U,
|
||||||
mut function: F)
|
mut function: F)
|
||||||
|
@ -8,9 +8,8 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(slice_patterns, rustc_attrs)]
|
#![feature(slice_patterns)]
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
let x = &[1, 2, 3, 4, 5];
|
let x = &[1, 2, 3, 4, 5];
|
||||||
let x: &[isize] = &[1, 2, 3, 4, 5];
|
let x: &[isize] = &[1, 2, 3, 4, 5];
|
||||||
|
@ -11,9 +11,7 @@
|
|||||||
|
|
||||||
#![feature(advanced_slice_patterns)]
|
#![feature(advanced_slice_patterns)]
|
||||||
#![feature(slice_patterns)]
|
#![feature(slice_patterns)]
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn a() {
|
fn a() {
|
||||||
let x = [1];
|
let x = [1];
|
||||||
match x {
|
match x {
|
||||||
@ -23,7 +21,6 @@ fn a() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn b() {
|
fn b() {
|
||||||
let x = [1, 2, 3];
|
let x = [1, 2, 3];
|
||||||
match x {
|
match x {
|
||||||
@ -60,7 +57,6 @@ fn b() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn b_slice() {
|
fn b_slice() {
|
||||||
let x : &[_] = &[1, 2, 3];
|
let x : &[_] = &[1, 2, 3];
|
||||||
match x {
|
match x {
|
||||||
@ -100,7 +96,6 @@ fn b_slice() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn c() {
|
fn c() {
|
||||||
let x = [1];
|
let x = [1];
|
||||||
match x {
|
match x {
|
||||||
@ -109,7 +104,6 @@ fn c() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn d() {
|
fn d() {
|
||||||
let x = [1, 2, 3];
|
let x = [1, 2, 3];
|
||||||
let branch = match x {
|
let branch = match x {
|
||||||
@ -121,7 +115,6 @@ fn d() {
|
|||||||
assert_eq!(branch, 1);
|
assert_eq!(branch, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn e() {
|
fn e() {
|
||||||
let x: &[isize] = &[1, 2, 3];
|
let x: &[isize] = &[1, 2, 3];
|
||||||
let a = match *x {
|
let a = match *x {
|
||||||
|
@ -11,13 +11,11 @@
|
|||||||
|
|
||||||
|
|
||||||
#![feature(slice_patterns)]
|
#![feature(slice_patterns)]
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
struct Foo {
|
struct Foo {
|
||||||
string: &'static str
|
string: &'static str
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
let x = [
|
let x = [
|
||||||
Foo { string: "foo" },
|
Foo { string: "foo" },
|
||||||
|
@ -8,13 +8,12 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs, unsafe_no_drop_flag)]
|
#![feature(unsafe_no_drop_flag)]
|
||||||
|
|
||||||
// ignore-pretty : (#23623) problems when ending with // comments
|
// ignore-pretty : (#23623) problems when ending with // comments
|
||||||
|
|
||||||
static mut destructions : isize = 3;
|
static mut destructions : isize = 3;
|
||||||
|
|
||||||
#[rustc_no_mir] // FIXME #29855 MIR doesn't handle all drops correctly.
|
|
||||||
pub fn foo() {
|
pub fn foo() {
|
||||||
#[unsafe_no_drop_flag]
|
#[unsafe_no_drop_flag]
|
||||||
struct Foo;
|
struct Foo;
|
||||||
|
@ -8,10 +8,8 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs)]
|
|
||||||
#![feature(slice_patterns)]
|
#![feature(slice_patterns)]
|
||||||
|
|
||||||
#[rustc_mir]
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let x = [(), ()];
|
let x = [(), ()];
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user