diff --git a/src/librustc/driver/session.rs b/src/librustc/driver/session.rs
index 4295d14441e..a8a948db4e1 100644
--- a/src/librustc/driver/session.rs
+++ b/src/librustc/driver/session.rs
@@ -192,7 +192,7 @@ pub enum EntryFnType {
     EntryNone,
 }
 
-#[deriving(Eq, Clone)]
+#[deriving(Eq, Clone, TotalOrd, TotalEq)]
 pub enum OutputStyle {
     OutputExecutable,
     OutputDylib,
@@ -461,6 +461,8 @@ pub fn collect_outputs(session: &Session,
     if base.len() == 0 {
         base.push(OutputExecutable);
     }
+    base.sort();
+    base.dedup();
     return base;
 }
 
diff --git a/src/test/run-make/duplicate-output-flavors/Makefile b/src/test/run-make/duplicate-output-flavors/Makefile
new file mode 100644
index 00000000000..a93a7ce8448
--- /dev/null
+++ b/src/test/run-make/duplicate-output-flavors/Makefile
@@ -0,0 +1,4 @@
+include ../tools.mk
+
+all:
+	$(RUSTC) --rlib foo.rs
diff --git a/src/test/run-make/duplicate-output-flavors/foo.rs b/src/test/run-make/duplicate-output-flavors/foo.rs
new file mode 100644
index 00000000000..3cdacc96ee9
--- /dev/null
+++ b/src/test/run-make/duplicate-output-flavors/foo.rs
@@ -0,0 +1 @@
+#[crate_type = "rlib"];