Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tuple struct constructors and uninitialized fields #96

Closed
wants to merge 20 commits into from

Conversation

oli-obk
Copy link
Contributor

@oli-obk oli-obk commented Dec 15, 2016

It might be easier to create a fourth variant to Value: Undefined, but that wouldn't allow for fat pointers where one part isn't defined yet. Having an undefined Primval might work.

@oli-obk
Copy link
Contributor Author

oli-obk commented Dec 15, 2016

#55 (run-pass) is now at

test result: FAILED. 2185 passed; 398 failed; 3 ignored; 0 measured

Associated constants are probably a big part of this, and 70 or more are threads

    106 error: attempted to read undefined bytes
     29 error: reached the configured maximum execution time
     20 error: can't call C ABI function: syscall
     16 error: panicked at src/libcore/slice.rs:566
     15 error: a raw memory access tried to access part of a pointer value as raw bytes
     12 error: index out of bounds: the len is 0 but the index is 0 at src/libcollections/vec.rs:1362:10: 1362:25
     10 error: panicked at src/libcore/option.rs:323
      9 error: tried to access memory through an invalid pointer
      9 error: cannot evaluate inline assembly
      6 error: linking with `cc` failed: exit code: 1
      6 collect2: error: ld returned 1 exit status
      5 error: panicked at src/libcore/str/mod.rs:1754
      5 error: no mir for `std::ops::Add::add`
      5 error: can't handle function with PlatformIntrinsic ABI
      5 error: can't call C ABI function: __rust_maybe_catch_panic
      5 error: can't call C ABI function: foo
      4 error: unimplemented intrinsic: atomic_xadd
      4 error: tried to access memory with alignment 1, but alignment 8 is required
      3 error: unimplemented intrinsic: atomic_store_relaxed
      3 error: tried to access memory with alignment 1, but alignment 4 is required
      3 error: internal compiler error: src/step.rs:247: static def id doesn't point to item
      2 error: no mir for `foolib::Foo::BAR`
      2 error: internal compiler error: src/librustc/ty/subst.rs:476: Type parameter `T/#0` (T/0) out of range when substituting (root type=Some(std::option::Option<T>)) substs=[]
      2 error: expected primitive type, got [u8; 8]
      2 error: dangling pointer was dereferenced
      2 error: can't call C ABI function: setenv
      2 error: can't call C ABI function: rust_interesting_average
      2 error: can't call C ABI function: rust_get_test_int
      2 error: can't call C ABI function: rust_dbg_call
      2 error: can't call C ABI function: readlink
      2 error: auxiliary build of "../rust/src/test/run-pass/auxiliary/foreign_lib.rs" failed to compile:
      2 error: auxiliary build of "../rust/src/test/run-pass/auxiliary/anon-extern-mod-cross-crate-1.rs" failed to compile:
      2 error: attempted to do math or a comparison on pointers into different allocations
      1 error: unimplemented intrinsic: atomic_store_rel
      1 error: unimplemented intrinsic: atomic_or
      1 error: unimplemented intrinsic: atomic_cxchg_relaxed
      1 error: tried to modify constant memory
      1 error: tried to access memory with alignment 2, but alignment 8 is required
      1 error: tried to access memory with alignment 1, but alignment 2 is required
      1 error: reached the configured maximum number of stack frames
      1 error: panicked at src/libcore/result.rs:837
      1 error: Overflow(Neg) at src/libcore/ops.rs:757:43: 757:45
      1 error: Overflow(Add) at src/libcore/ops.rs:263:45: 263:57
      1 error: no mir for `std::sys::imp::os::environ::::environ`
      1 error: no mir for `std::ops::Deref::deref`
      1 error: no mir for `std::iter::IntoIterator::into_iter`
      1 error: memory access of 85899344..85899346 outside bounds of allocation 301 which has size 200
      1 error: internal compiler error: src/vtable.rs:65: bad VtableFnPointer fn_ty: fn(u32) -> u32
      1 error: internal compiler error: src/value.rs:92: expected ptr and vtable, got ByVal(PrimVal { bits: 0, relocation: Some(AllocId(6)) })
      1 error: internal compiler error: src/terminator/mod.rs:947: find_method: translate_substs returned Slice(['_#0r, &(), u32]) which contains inference types/regions
      1 error: internal compiler error: src/terminator/mod.rs:789: UntaggedUnion { variants: Union { align: Align { raw: 51 }, min_size: Size { raw: 8 }, packed: false } } is not an adt layout
      1 error: internal compiler error: src/terminator/mod.rs:789: UntaggedUnion { variants: Union { align: Align { raw: 48 }, min_size: Size { raw: 1 }, packed: false } } is not an adt layout
      1 error: internal compiler error: src/terminator/mod.rs:789: UntaggedUnion { variants: Union { align: Align { raw: 48 }, min_size: Size { raw: 0 }, packed: false } } is not an adt layout
      1 error: internal compiler error: src/terminator/mod.rs:789: CEnum { discr: I8, signed: false, non_zero: false, min: 0, max: 1 } is not an adt layout
      1 error: internal compiler error: src/terminator/mod.rs:657: VtableFnPointer did not contain a concrete function: VtableFnPointer(fn_ty=fn(char) -> bool, nested=[])
      1 error: internal compiler error: src/terminator/mod.rs:278: bad layout for tuple struct constructor: General { discr: I32, variants: [Struct { align: Align { raw: 50 }, packed: false, sized: true, offsets: [Size { raw: 0 }, Size { raw: 4 }], min_size: Size { raw: 8 } }, Struct { align: Align { raw: 50 }, packed: false, sized: true, offsets: [Size { raw: 0 }, Size { raw: 4 }], min_size: Size { raw: 12 } }], size: Size { raw: 12 }, align: Align { raw: 50 } }
      1 error: internal compiler error: src/librustc/ty/mod.rs:1901: No def'n found for DefId { krate: CrateNum(0), node: DefIndex(5) => issue_23808/4089d7c8b778d88cec885baf7b69e6df-exe::Const[0]::C[0] } in tcx.mir_map
      1 error: internal compiler error: src/librustc/ty/mod.rs:1901: No def'n found for DefId { krate: CrateNum(0), node: DefIndex(5) => associated_const_use_impl_of_same_trait/4089d7c8b778d88cec885baf7b69e6df-exe::Foo[0]::BAR[0] } in tcx.mir_map
      1 error: internal compiler error: src/librustc/ty/mod.rs:1901: No def'n found for DefId { krate: CrateNum(0), node: DefIndex(5) => associated_const_ufcs_infer_trait/4089d7c8b778d88cec885baf7b69e6df-exe::Foo[0]::ID[0] } in tcx.mir_map
      1 error: internal compiler error: src/librustc/ty/mod.rs:1901: No def'n found for DefId { krate: CrateNum(0), node: DefIndex(5) => associated_const_type_parameters/4089d7c8b778d88cec885baf7b69e6df-exe::Foo[0]::X[0] } in tcx.mir_map
      1 error: internal compiler error: src/librustc/ty/mod.rs:1901: No def'n found for DefId { krate: CrateNum(0), node: DefIndex(5) => associated_const_self_type/4089d7c8b778d88cec885baf7b69e6df-exe::MyInt[0]::ONE[0] } in tcx.mir_map
      1 error: internal compiler error: src/librustc/ty/mod.rs:1901: No def'n found for DefId { krate: CrateNum(0), node: DefIndex(5) => associated_const_const_eval/4089d7c8b778d88cec885baf7b69e6df-exe::Foo[0]::NUM[0] } in tcx.mir_map
      1 error: internal compiler error: src/librustc/ty/mod.rs:1901: No def'n found for DefId { krate: CrateNum(0), node: DefIndex(5) => associated_const/4089d7c8b778d88cec885baf7b69e6df-exe::Foo[0]::ID[0] } in tcx.mir_map
      1 error: internal compiler error: src/librustc/ty/mod.rs:1901: No def'n found for DefId { krate: CrateNum(0), node: DefIndex(10) => associated_const_resolution_order/4089d7c8b778d88cec885baf7b69e6df-exe::MyTrait[0]::IMPL_IS_INHERENT[0] } in tcx.mir_map
      1 error: internal compiler error: src/librustc_trans/mir/constant.rs:375: assignment to (_0.0: u32) in constant
      1 error: internal compiler error: src/librustc_borrowck/borrowck/mir/gather_moves.rs:511: Broken MIR: moving out of lvalue (*_9): Box<isize> at bb4[10]
      1 error: internal compiler error: src/librustc_borrowck/borrowck/mir/gather_moves.rs:511: Broken MIR: moving out of lvalue (*_3): T at bb3[0]
      1 error: internal compiler error: src/librustc_borrowck/borrowck/mir/gather_moves.rs:511: Broken MIR: moving out of lvalue ((*_3).1: std::option::Option<Box<std::cell::RefCell<list<T>>>>): std::option::Option<Box<std::cell::RefCell<list<T>>>> at bb4[2]
      1 error: internal compiler error: src/librustc_borrowck/borrowck/mir/gather_moves.rs:511: Broken MIR: moving out of lvalue ((*_3).0: S): S at bb0[6]
      1 error: internal compiler error: src/librustc_borrowck/borrowck/mir/gather_moves.rs:511: Broken MIR: moving out of lvalue ((*_3).0: Box<Subscriber<Input=u64>>): Box<Subscriber<Input=u64>> at bb0[8]
      1 error: internal compiler error: src/librustc_borrowck/borrowck/mir/gather_moves.rs:511: Broken MIR: moving out of lvalue (*_2): std::option::Option<Box<Node<std::marker::Send>>> at bb5[7]
      1 error: internal compiler error: src/librustc_borrowck/borrowck/mir/gather_moves.rs:511: Broken MIR: moving out of lvalue (*_2): Box<u8> at bb0[6]
      1 error: internal compiler error: src/librustc_borrowck/borrowck/mir/gather_moves.rs:511: Broken MIR: moving out of lvalue (*_2): Box<isize> at bb0[6]
      1 error: internal compiler error: src/librustc_borrowck/borrowck/mir/gather_moves.rs:511: Broken MIR: moving out of lvalue (*_202): std::vec::Vec<i32> at bb48[1]
      1 error: could not find native static library `rust_test_helpers`, perhaps an -L flag is missing?
      1 error: can't handle type: [closure@../rust/src/test/run-pass/nullable-pointer-opt-closures.rs:32:18: 32:43 a:std::string::String], TyClosure(DefId { krate: CrateNum(0), node: DefIndex(14) => nullable_pointer_opt_closures/4089d7c8b778d88cec885baf7b69e6df-exe::main[0]::{{closure}}[2] }, ClosureSubsts { substs: Slice([std::string::String]) })
      1 error: can't handle function with Win64 ABI
      1 error: can't handle function with Vectorcall ABI
      1 error: can't handle function with SysV64 ABI
      1 error: can't handle function with Fastcall ABI
      1 error: can't call C ABI function: tuple2
      1 error: can't call C ABI function: transmute
      1 error: can't call C ABI function: the_foo
      1 error: can't call C ABI function: test
      1 error: can't call C ABI function: strlen
      1 error: can't call C ABI function: stat64
      1 error: can't call C ABI function: simple_extern
      1 error: can't call C ABI function: sigaction
      1 error: can't call C ABI function: sched_yield
      1 error: can't call C ABI function: rust_int8_to_int32
      1 error: can't call C ABI function: rust_dbg_extern_return_TwoU8s
      1 error: can't call C ABI function: rust_dbg_extern_return_TwoU64s
      1 error: can't call C ABI function: rust_dbg_extern_return_TwoU32s
      1 error: can't call C ABI function: rust_dbg_extern_return_TwoU16s
      1 error: can't call C ABI function: rust_dbg_extern_identity_u8
      1 error: can't call C ABI function: rust_dbg_extern_identity_u64
      1 error: can't call C ABI function: rust_dbg_extern_identity_u32
      1 error: can't call C ABI function: rust_dbg_extern_identity_TwoU8s
      1 error: can't call C ABI function: rust_dbg_extern_identity_TwoU64s
      1 error: can't call C ABI function: rust_dbg_extern_identity_TwoU32s
      1 error: can't call C ABI function: rust_dbg_extern_identity_TwoU16s
      1 error: can't call C ABI function: rust_dbg_extern_identity_double
      1 error: can't call C ABI function: rust_dbg_extern_empty_struct
      1 error: can't call C ABI function: rust_dbg_abi_1
      1 error: can't call C ABI function: puts
      1 error: can't call C ABI function: nanosleep
      1 error: can't call C ABI function: malloc
      1 error: can't call C ABI function: lgamma_r
      1 error: can't call C ABI function: issue_28983
      1 error: can't call C ABI function: increment_all_parts
      1 error: can't call C ABI function: good
      1 error: can't call C ABI function: get_x
      1 error: can't call C ABI function: getcwd
      1 error: can't call C ABI function: get_c_many_params
      1 error: can't call C ABI function: getaddrinfo
      1 error: can't call C ABI function: free
      1 error: can't call C ABI function: f
      1 error: can't call C ABI function: dup
      1 error: can't call C ABI function: dlsym
      1 error: can't call C ABI function: close
      1 error: can't call C ABI function: atol
      1 error: auxiliary build of "../rust/src/test/run-pass/auxiliary/issue-25185-1.rs" failed to compile:
      1 error: auxiliary build of "../rust/src/test/run-pass/auxiliary/extern-crosscrate-source.rs" failed to compile:
      1 error: `assume` argument was false

@oli-obk
Copy link
Contributor Author

oli-obk commented Dec 17, 2016

Nightly has the necessary changes now.

@solson solson changed the base branch from always_encode_mir to master December 17, 2016 01:45
@solson
Copy link
Member

solson commented Dec 17, 2016

I changed the PR base to solson:master since it contains all the code from the solson:always_encode_mir branch now due to #97.

@oli-obk
Copy link
Contributor Author

oli-obk commented Dec 19, 2016

I rebased over your changes (which enabled me to simply remove an entire hacky commit 🎉 )

I also re-enabled auxiliary tests for the host only (we need to make sure we drop a ignore-cross-compile comment into every test utilizing auxiliary compilation units)

$someday, in the glorious future of lld or something else, we won't need such hacks

@oli-obk
Copy link
Contributor Author

oli-obk commented Dec 20, 2016

this is ready for review (and passing travis ^^)

@oli-obk
Copy link
Contributor Author

oli-obk commented Jan 9, 2017

so... I did the minimal work for the i128 rustup. But one question is open: should we immediately change code to support 128 bit pointers, or is it ok to leave those at 64 bit?

@eddyb
Copy link
Member

eddyb commented Jan 9, 2017

128 bit pointers are expected to never happen at this point.

@oli-obk
Copy link
Contributor Author

oli-obk commented Jan 9, 2017

Great. So Primvals are 128 bit, Value::ByValPair is 256bit + discriminant and Pointer stays at 128bit (offset + alloc_id). We should probably fix the ergonomics with as_u128 and friends (since we often want usize of the target, which we know will be 64 bits max).

@eddyb
Copy link
Member

eddyb commented Jan 9, 2017

I'd keep only 64-bit immediate and load/store i128 from memory as needed.

@oli-obk
Copy link
Contributor Author

oli-obk commented Jan 9, 2017

that's gonna make basic math really weird

@oli-obk
Copy link
Contributor Author

oli-obk commented Jan 9, 2017

Also, there's no gain. PrimVal's Pointer variant is already 128 bit, so there's no reason to make the Bytes variant smaller.

@eddyb
Copy link
Member

eddyb commented Jan 9, 2017

Oh, that makes more sense, nevermind me.
It only works because pointers are smaller.

@oli-obk oli-obk force-pushed the always_encode_mir branch 8 times, most recently from dd18c7c to bf51059 Compare January 10, 2017 12:26
@oli-obk
Copy link
Contributor Author

oli-obk commented Jan 10, 2017

tests now run on x86_64_unknown_linux_gnu, i686_unknown_linux_gnu, x86_64_pc_windows_gnu, x86_64_pc_windows_msvc

@oli-obk oli-obk mentioned this pull request Jan 12, 2017
@oli-obk oli-obk closed this Jan 12, 2017
erickt pushed a commit to erickt/miri that referenced this pull request Feb 4, 2022
Also update the travis script and the README to indicate that MSRV is
1.18 for builds, and 1.30 for development builds.

Fixes rust-lang#96.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants