From 1654f08e030a59c6438347cd822a82a3da0abbc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Steinbrink?= Date: Mon, 21 Jul 2014 20:57:37 +0200 Subject: [PATCH] Allow merging of statics generated by format!() --- src/libsyntax/ext/format.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/libsyntax/ext/format.rs b/src/libsyntax/ext/format.rs index 4b245f2c9fd48..8fefd46565589 100644 --- a/src/libsyntax/ext/format.rs +++ b/src/libsyntax/ext/format.rs @@ -316,6 +316,11 @@ impl<'a, 'b> Context<'a, 'b> { /// These attributes are applied to all statics that this syntax extension /// will generate. fn static_attrs(&self) -> Vec { + // Flag statics as `inline` so LLVM can merge duplicate globals as much + // as possible (which we're generating a whole lot of). + let unnamed = self.ecx.meta_word(self.fmtsp, InternedString::new("inline")); + let unnamed = self.ecx.attribute(self.fmtsp, unnamed); + // Do not warn format string as dead code let dead_code = self.ecx.meta_word(self.fmtsp, InternedString::new("dead_code")); @@ -323,7 +328,7 @@ impl<'a, 'b> Context<'a, 'b> { InternedString::new("allow"), vec!(dead_code)); let allow_dead_code = self.ecx.attribute(self.fmtsp, allow_dead_code); - return vec!(allow_dead_code); + return vec!(unnamed, allow_dead_code); } fn rtpath(&self, s: &str) -> Vec {