[PATCH] D59373: Make a hack for LTO work only when you are actually doing LTO.

Rui Ueyama via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 14 11:23:43 PDT 2019


This revision was automatically updated to reflect the committed changes.
Closed by commit rL356186: Make a hack for LTO work only when you are actually doing LTO. (authored by ruiu, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D59373?vs=190668&id=190689#toc

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D59373/new/

https://reviews.llvm.org/D59373

Files:
  lld/trunk/ELF/Driver.cpp
  lld/trunk/test/ELF/invalid/invalid-elf.test
  lld/trunk/test/ELF/lto/archive-no-index.ll


Index: lld/trunk/test/ELF/lto/archive-no-index.ll
===================================================================
--- lld/trunk/test/ELF/lto/archive-no-index.ll
+++ lld/trunk/test/ELF/lto/archive-no-index.ll
@@ -1,8 +1,6 @@
 ; REQUIRES: x86
-; Tests that we suggest that LTO symbols missing from an archive index
-; may be the cause of undefined references, but only if we both
-; encountered an empty archive index and undefined references (to prevent
-; noisy false alarms).
+; Tests that we accept an archive file without symbol table
+; if all the member files are bitcode files.
 
 ; RUN: llvm-as -o %t1.o %s
 ; RUN: llvm-as -o %t2.o %S/Inputs/archive.ll
@@ -23,3 +21,14 @@
   call void @f()
   ret i32 0
 }
+
+; RUN: echo 'f:' | llvm-mc -triple=x86_64-pc-linux -filetype=obj - -o %t3.o
+; RUN: rm -f %t3.a
+; RUN: llvm-ar crS %t3.a %t3.o
+; RUN: not ld.lld -o /dev/null -emain %t1.o %t3.a 2>&1 | FileCheck -check-prefix=ERR1 %s
+; ERR1: error: undefined symbol: f
+
+; RUN: rm -f %t4.a
+; RUN: llvm-ar cr %t4.a
+; RUN: not ld.lld -o /dev/null -emain %t1.o %t4.a 2>&1 | FileCheck -check-prefix=ERR2 %s
+; ERR2: error: undefined symbol: f
Index: lld/trunk/test/ELF/invalid/invalid-elf.test
===================================================================
--- lld/trunk/test/ELF/invalid/invalid-elf.test
+++ lld/trunk/test/ELF/invalid/invalid-elf.test
@@ -4,7 +4,7 @@
 # RUN: echo > %t/empty.o
 # RUN: llvm-ar --format=gnu cr %t/not-elf.a %t/empty.o
 
-# RUN: not ld.lld %t/simple.o %t/not-elf.a -o %t2 2>&1 | \
+# RUN: not ld.lld --whole-archive %t/not-elf.a -o %t2 2>&1 | \
 # RUN:   FileCheck --check-prefix=NOT-ELF %s
 # NOT-ELF: not-elf.a(empty.o): not an ELF file
 
Index: lld/trunk/ELF/Driver.cpp
===================================================================
--- lld/trunk/ELF/Driver.cpp
+++ lld/trunk/ELF/Driver.cpp
@@ -213,7 +213,15 @@
     // understand the LLVM bitcode file. It is a pretty common error, so
     // we'll handle it as if it had a symbol table.
     if (!File->isEmpty() && !File->hasSymbolTable()) {
-      for (const auto &P : getArchiveMembers(MBRef))
+      // Check if all members are bitcode files. If not, ignore, which is the
+      // default action without the LTO hack described above.
+      for (const std::pair<MemoryBufferRef, uint64_t> &P :
+           getArchiveMembers(MBRef))
+        if (identify_magic(P.first.getBuffer()) != file_magic::bitcode)
+          return;
+
+      for (const std::pair<MemoryBufferRef, uint64_t> &P :
+           getArchiveMembers(MBRef))
         Files.push_back(make<LazyObjFile>(P.first, Path, P.second));
       return;
     }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D59373.190689.patch
Type: text/x-patch
Size: 2622 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190314/a0a11510/attachment.bin>


More information about the llvm-commits mailing list