// Emit address-significance attributes for all globals.
OutStreamer->EmitAddrsig();
for (const GlobalValue &GV : M.global_values())
- if (!GV.isThreadLocal() && !GV.getName().startswith("llvm.") &&
+ if (!GV.use_empty() && !GV.isThreadLocal() &&
+ !GV.hasDLLImportStorageClass() && !GV.getName().startswith("llvm.") &&
!GV.hasAtLeastLocalUnnamedAddr())
OutStreamer->EmitAddrsigSym(getSymbol(&GV));
}
; CHECK: .addrsig_sym f1
define void @f1() {
+ %f1 = bitcast void()* @f1 to i8*
+ %f2 = bitcast void()* @f2 to i8*
+ %f3 = bitcast void()* @f3 to i8*
+ %g1 = bitcast i32* @g1 to i8*
+ %g2 = bitcast i32* @g2 to i8*
+ %g3 = bitcast i32* @g3 to i8*
+ %dllimport = bitcast i32* @dllimport to i8*
+ %tls = bitcast i32* @tls to i8*
+ %a1 = bitcast i32* @a1 to i8*
+ %a2 = bitcast i32* @a2 to i8*
+ %i1 = bitcast void()* @i1 to i8*
+ %i2 = bitcast void()* @i2 to i8*
unreachable
}
; CHECK-NOT: .addrsig_sym g3
@g3 = external unnamed_addr global i32
+; CHECK-NOT: .addrsig_sym unref
+@unref = external global i32
+
+; CHECK-NOT: .addrsig_sym dllimport
+@dllimport = external dllimport global i32
+
; CHECK-NOT: .addrsig_sym tls
@tls = thread_local global i32 0