diff options
| author | Antti Keränen <detegr@gmail.com> | 2015-07-23 19:26:36 +0300 |
|---|---|---|
| committer | Antti Keränen <detegr@gmail.com> | 2015-07-23 23:23:56 +0300 |
| commit | e981311ec2e019c13088d7e510e0c050da3bcb5e (patch) | |
| tree | a56a1284e7765bdbfecca17bf9c0f0b71994148b | |
| parent | 7911d9979f672982b45d288d3cd6e5f588a2b699 (diff) | |
| download | rust-e981311ec2e019c13088d7e510e0c050da3bcb5e.tar.gz rust-e981311ec2e019c13088d7e510e0c050da3bcb5e.zip | |
eval_const_expr_partial now returns ConstVal::Struct instead of None for unit-struct path expressions. Fixes #27008
| -rw-r--r-- | src/librustc/middle/const_eval.rs | 3 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-27008.rs | 21 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/librustc/middle/const_eval.rs b/src/librustc/middle/const_eval.rs index 9e2bcbaec8a..a349dab0f72 100644 --- a/src/librustc/middle/const_eval.rs +++ b/src/librustc/middle/const_eval.rs @@ -967,6 +967,9 @@ pub fn eval_const_expr_partial<'tcx>(tcx: &ty::ctxt<'tcx>, Some(def::DefVariant(enum_def, variant_def, _)) => { (lookup_variant_by_id(tcx, enum_def, variant_def), None) } + Some(def::DefStruct(_)) => { + return Ok(ConstVal::Struct(e.id)) + } _ => (None, None) }; let const_expr = match const_expr { diff --git a/src/test/compile-fail/issue-27008.rs b/src/test/compile-fail/issue-27008.rs new file mode 100644 index 00000000000..2a4b98563ab --- /dev/null +++ b/src/test/compile-fail/issue-27008.rs @@ -0,0 +1,21 @@ +// Copyright 2015 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. + +struct S; + +fn main() { + let b = [0; S]; + //~^ ERROR mismatched types + //~| expected `usize` + //~| found `S` + //~| expected usize + //~| found struct `S` + //~| ERROR expected positive integer for repeat count, found struct +} |
