mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-19 03:54:40 +00:00
Always evaluate the expression in [expr; n]
In case that there is a destination for the array, like in "let x = [expr; n]", we currently don't evaluate the given expression if n is zero. That's inconsistent with all other cases, including "[expr; 0]" without a destination. Fixes #23354
This commit is contained in:
parent
766a4e1acc
commit
3a8f989dbb
@ -293,7 +293,7 @@ pub fn write_content<'blk, 'tcx>(bcx: Block<'blk, 'tcx>,
|
|||||||
}
|
}
|
||||||
SaveIn(lldest) => {
|
SaveIn(lldest) => {
|
||||||
match ty::eval_repeat_count(bcx.tcx(), &**count_expr) {
|
match ty::eval_repeat_count(bcx.tcx(), &**count_expr) {
|
||||||
0 => bcx,
|
0 => expr::trans_into(bcx, &**element, Ignore),
|
||||||
1 => expr::trans_into(bcx, &**element, SaveIn(lldest)),
|
1 => expr::trans_into(bcx, &**element, SaveIn(lldest)),
|
||||||
count => {
|
count => {
|
||||||
let elem = unpack_datum!(bcx, expr::trans(bcx, &**element));
|
let elem = unpack_datum!(bcx, expr::trans(bcx, &**element));
|
||||||
|
16
src/test/run-fail/issue-23354.rs
Normal file
16
src/test/run-fail/issue-23354.rs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
// error-pattern:panic evaluated
|
||||||
|
|
||||||
|
#[allow(unused_variables)]
|
||||||
|
fn main() {
|
||||||
|
let x = [panic!("panic evaluated"); 0];
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user