diff --git a/src/librustc_trans/mir/constant.rs b/src/librustc_trans/mir/constant.rs index 040194e63d0..1305d6fff8c 100644 --- a/src/librustc_trans/mir/constant.rs +++ b/src/librustc_trans/mir/constant.rs @@ -415,8 +415,11 @@ impl<'a, 'tcx> MirConstContext<'a, 'tcx> { Value(base)); } if projected_ty.is_bool() { - unsafe { - val = llvm::LLVMConstTrunc(val, Type::i1(self.ccx).to_ref()); + let i1_type = Type::i1(self.ccx); + if val_ty(val) != i1_type { + unsafe { + val = llvm::LLVMConstTrunc(val, i1_type.to_ref()); + } } } (Base::Value(val), extra) diff --git a/src/test/run-pass/issue-41744.rs b/src/test/run-pass/issue-41744.rs new file mode 100644 index 00000000000..276067d7d74 --- /dev/null +++ b/src/test/run-pass/issue-41744.rs @@ -0,0 +1,16 @@ +// Copyright 2017 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. + +trait Tc {} +impl Tc for bool {} + +fn main() { + let _: &[&Tc] = &[&true]; +}