From 870024a16047341644e31d6ba7617162c205d204 Mon Sep 17 00:00:00 2001
From: Alex Crichton <alex@alexcrichton.com>
Date: Thu, 26 Dec 2013 22:27:06 -0800
Subject: [PATCH] Disallow LTO with a preference to dynamic linking

Closes #11154
---
 src/librustc/back/lto.rs             |  6 ++++++
 src/test/compile-fail/issue-11154.rs | 15 +++++++++++++++
 2 files changed, 21 insertions(+)
 create mode 100644 src/test/compile-fail/issue-11154.rs

diff --git a/src/librustc/back/lto.rs b/src/librustc/back/lto.rs
index 2425b36687e..ced8fa68f59 100644
--- a/src/librustc/back/lto.rs
+++ b/src/librustc/back/lto.rs
@@ -19,6 +19,12 @@ use std::libc;
 
 pub fn run(sess: session::Session, llmod: ModuleRef,
            tm: TargetMachineRef, reachable: &[~str]) {
+    if sess.prefer_dynamic() {
+        sess.err("cannot prefer dynamic linking when performing LTO");
+        sess.note("only 'staticlib' and 'bin' outputs are supported with LTO");
+        sess.abort_if_errors();
+    }
+
     // Make sure we actually can run LTO
     let outputs = sess.outputs.borrow();
     for output in outputs.get().iter() {
diff --git a/src/test/compile-fail/issue-11154.rs b/src/test/compile-fail/issue-11154.rs
new file mode 100644
index 00000000000..47f86e52eae
--- /dev/null
+++ b/src/test/compile-fail/issue-11154.rs
@@ -0,0 +1,15 @@
+// Copyright 2013 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.
+
+// compile-flags: -Z lto -Z prefer-dynamic
+
+// error-pattern: cannot prefer dynamic linking
+
+fn main() {}