8000 Rollup of 7 pull requests by Centril · Pull Request #66997 · rust-lang/rust · GitHub
[go: up one dir, main page]

Skip to content

Rollup of 7 pull requests #66997

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

Merged
merged 31 commits into from
Dec 3, 2019
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
cb08677
parse_enum_item -> parse_enum_variant
Centril Nov 30, 2019
ff5fcac
miri: add throw_machine_stop macro
RalfJung Dec 2, 2019
2304c25
Update the minimum external LLVM to 7
cuviper Dec 2, 2019
54b2060
Change linker for x86_64-fortanix-unknown-sgx to rust-lld
parthsane Dec 2, 2019
0be80f2
[const-prop] Fix ICE calculating enum discriminant
wesleywiser Nov 29, 2019
f3fb1c5
Update the `wasi` crate for `wasm32-wasi`
alexcrichton Nov 25, 2019
2ea1833
Use FxHash* from data structures not nodemap
Mark-Simulacrum Nov 12, 2019
b7cd58c
Decouple CguReuseTracker from Session
Mark-Simulacrum Nov 12, 2019
c761ec1
Introduce rustc_session crate
Mark-Simulacrum Nov 12, 2019
984c74a
Move cgu_reuse_tracker to librustc_session
Mark-Simulacrum Nov 12, 2019
4351698
Move duration_to_secs_str to rustc_session
Mark-Simulacrum Nov 12, 2019
433e546
Move Level to rustc_session
Mark-Simulacrum Nov 12, 2019
526ee51
Move Lint to rustc_session
Mark-Simulacrum Nov 12, 2019
f03d8f3
Move early lint declarations to librustc_session
Mark-Simulacrum Nov 12, 2019
285144a
Move NativeLibraryKind to rustc_session
Mark-Simulacrum Nov 14, 2019
72c67be
Re-export Client from rustc_data_structures::jobserver
Mark-Simulacrum Nov 20, 2019
f2a8aed
Directly use types from libsyntax::ast
Mark-Simulacrum Nov 20, 2019
e810b7e
Remove dead cfg method
Mark-Simulacrum Nov 29, 2019
2731075
Duplicate CrateConfig into Session
Mark-Simulacrum Nov 29, 2019
817d1ae
Move BufferedEarlyLint to librustc_session
Mark-Simulacrum Nov 29, 2019
52d4d47
Move ParseSess to librustc_session
Mark-Simulacrum Nov 29, 2019
cc2c33a
Move Session to librustc_session
Mark-Simulacrum Nov 29, 2019
42c4ae0
Deduplicate CrateConfig
Mark-Simulacrum Nov 29, 2019
68fb218
Fix UI tests for new locations
Mark-Simulacrum Dec 1, 2019
1b83dcf
Rollup merge of #66750 - alexcrichton:update-wasi, r=sfackler
Centril Dec 3, 2019
b6602d2
Rollup merge of #66878 - Mark-Simulacrum:sess-decouple, r=Centril
Centril Dec 3, 2019
d4b6235
Rollup merge of #66903 - Centril:parse-enum-variant, r=estebank
Centril Dec 3, 2019
71d1286
Rollup merge of #66951 - RalfJung:miri-machine-stop, r=oli-obk
Centril Dec 3, 2019
69f1323
Rollup merge of #66957 - parthsane:pvs/ftx_lld_linker, r=alexcrichton
Centril Dec 3, 2019
ded9885
Rollup merge of #66960 - wesleywiser:fix_66787_take2, r=oli-obk,RalfJung
Centril Dec 3, 2019
8dcb532
Rollup merge of #66973 - cuviper:min-llvm7, r=alexcrichton
Centril Dec 3, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 13 additions & 10 deletions src/librustc_mir/interpret/place.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1065,23 +1065,26 @@ where
variant_index: VariantIdx,
dest: PlaceTy<'tcx, M::PointerTag>,
) -> InterpResult<'tcx> {
let variant_scalar = Scalar::from_u32(variant_index.as_u32()).into();

// Layout computation excludes uninhabited variants from consideration
// therefore there's no way to represent those variants in the given layout.
if dest.layout.for_variant(self, variant_index).abi.is_uninhabited() {
throw_ub!(Unreachable);
}

match dest.layout.variants {
layout::Variants::Single { index } => {
if index != variant_index {
throw_ub!(InvalidDiscriminant(variant_scalar));
}
assert_eq!(index, variant_index);
}
layout::Variants::Multiple {
discr_kind: layout::DiscriminantKind::Tag,
discr: ref discr_layout,
discr_index,
..
} => {
if !dest.layout.ty.variant_range(*self.tcx).unwrap().contains(&variant_index) {
throw_ub!(InvalidDiscriminant(variant_scalar));
}
// No need to validate that the discriminant here because the
// `TyLayout::for_variant()` call earlier already checks the variant is valid.

let discr_val =
dest.layout.ty.discriminant_for_variant(*self.tcx, variant_index).unwrap().val;

Expand All @@ -1104,9 +1107,9 @@ where
discr_index,
..
} => {
if !variant_index.as_usize() < dest.layout.ty.ty_adt_def().unwrap().variants.len() {
throw_ub!(InvalidDiscriminant(variant_scalar));
}
// No need to validate that the discriminant here because the
// `TyLayout::for_variant()` call earlier already checks the variant is valid.

if variant_index != dataful_variant {
let variants_start = niche_variants.start().as_u32();
let variant_index_relative = variant_index.as_u32()
Expand Down
39 changes: 39 additions & 0 deletions src/test/ui/consts/issue-66787.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// build-pass
// compile-flags: --crate-type lib

// Regression test for ICE which occurred when const propagating an enum with three variants
// one of which is uninhabited.

pub enum ApiError {}
#[allow(dead_code)]
pub struct TokioError {
b: bool,
}
pub enum Error {
Api {
source: ApiError,
},
Ethereum,
Tokio {
source: TokioError,
},
}
struct Api;
impl IntoError<Error> for Api
{
type Source = ApiError;
fn into_error(self, error: Self::Source) -> Error {
Error::Api {
source: (|v| v)(error),
}
}
}

pub trait IntoError<E>
{
/// The underlying error
type Source;

/// Combine the information to produce the error
fn into_error(self, source: Self::Source) -> E;
}
0