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) => {
|
||||
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)),
|
||||
count => {
|
||||
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