From ecf62e4cdcbe9fe59e2e1280739d15953cc0e500 Mon Sep 17 00:00:00 2001 From: Ariel Ben-Yehuda Date: Sat, 1 Jul 2017 22:00:20 +0300 Subject: [LLVM] Avoid losing the !nonnull attribute in SROA This still does not work on 32-bit archs because of an LLVM limitation, but this is only an optimization, so let's push it on 64-bit only for now. Fixes #37945 --- src/test/codegen/issue-37945.rs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/test/codegen/issue-37945.rs (limited to 'src/test/codegen') diff --git a/src/test/codegen/issue-37945.rs b/src/test/codegen/issue-37945.rs new file mode 100644 index 00000000000..e7c91f30918 --- /dev/null +++ b/src/test/codegen/issue-37945.rs @@ -0,0 +1,36 @@ +// 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. + +// min-llvm-version 4.0 +// compile-flags: -O +// ignore-x86 +// ignore-arm +// ignore-emscripten +// ignore 32-bit platforms (LLVM has a bug with them) + +// See issue #37945. + +#![crate_type = "lib"] + +use std::slice::Iter; + +// CHECK-LABEL: @is_empty_1 +#[no_mangle] +pub fn is_empty_1(xs: Iter) -> bool { +// CHECK-NOT: icmp eq float* {{.*}}, null + {xs}.next().is_none() +} + +// CHECK-LABEL: @is_empty_2 +#[no_mangle] +pub fn is_empty_2(xs: Iter) -> bool { +// CHECK-NOT: icmp eq float* {{.*}}, null + xs.map(|&x| x).next().is_none() +} -- cgit 1.4.1-3-g733a5