From 68c1ce91701a322601dec0e0c8845e535909f9b2 Mon Sep 17 00:00:00 2001 From: Eduard-Mihai Burtescu Date: Fri, 12 May 2017 00:14:31 +0300 Subject: [PATCH] rustc_trans: do not attempt to truncate an i1 const to i1. --- src/librustc_trans/mir/constant.rs | 7 +++++-- src/test/run-pass/issue-41744.rs | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 src/test/run-pass/issue-41744.rs 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]; +}