Skip to content

Commit

Permalink
Fix ICE on const of nullable enum with fields in null case.
Browse files Browse the repository at this point in the history
That is, if you have an enum type that is subject to the nullable
pointer optimization, but the null variant has a nonzero number of
fields, and you declare a static whose value is of that variant, then
that used to be an ICE but this change fixes it.
  • Loading branch information
jld committed Jan 10, 2014
1 parent 28ddc65 commit 5487f15
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
1 change: 0 additions & 1 deletion src/librustc/middle/trans/adt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -730,7 +730,6 @@ pub fn trans_const(ccx: &CrateContext, r: &Repr, discr: Disr,
if discr == nndiscr {
C_struct(build_const_struct(ccx, nonnull, vals), false)
} else {
assert_eq!(vals.len(), 0);
let vals = nonnull.fields.iter().enumerate().map(|(i, &ty)| {
let llty = type_of::sizing_type_of(ccx, ty);
if i == ptrfield { C_null(llty) } else { C_undef(llty) }
Expand Down
19 changes: 19 additions & 0 deletions src/test/run-pass/enum-nullable-const-null-with-fields.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// Copyright 2014 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.

use std::result::{Result,Ok};
static C: Result<(), ~int> = Ok(());

// This is because of yet another bad assertion (ICE) about the null side of a nullable enum.
// So we won't actually compile if the bug is present, but we check the value in main anyway.

pub fn main() {
assert!(C.is_ok());
}

5 comments on commit 5487f15

@bors
Copy link
Contributor

@bors bors commented on 5487f15 Jan 10, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

saw approval from alexcrichton
at jld@5487f15

@bors
Copy link
Contributor

@bors bors commented on 5487f15 Jan 10, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

merging jld/rust/enum-nullable-const-null-with-fields = 5487f15 into auto

@bors
Copy link
Contributor

@bors bors commented on 5487f15 Jan 10, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

jld/rust/enum-nullable-const-null-with-fields = 5487f15 merged ok, testing candidate = 423dd84

@bors
Copy link
Contributor

@bors bors commented on 5487f15 Jan 10, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bors
Copy link
Contributor

@bors bors commented on 5487f15 Jan 10, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fast-forwarding master to auto = 423dd84

Please sign in to comment.