From e981311ec2e019c13088d7e510e0c050da3bcb5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antti=20Ker=C3=A4nen?= Date: Thu, 23 Jul 2015 19:26:36 +0300 Subject: [PATCH] eval_const_expr_partial now returns ConstVal::Struct instead of None for unit-struct path expressions. Fixes #27008 --- src/librustc/middle/const_eval.rs | 3 +++ src/test/compile-fail/issue-27008.rs | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 src/test/compile-fail/issue-27008.rs diff --git a/src/librustc/middle/const_eval.rs b/src/librustc/middle/const_eval.rs index 9e2bcbaec8a6c..a349dab0f72ea 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 0000000000000..2a4b98563ab9f --- /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 or the MIT license +// , 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 +}