[PATCH] D43964: Report an error if you try to link against .dll instead of .lib.

Rui Ueyama via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 1 15:13:49 PST 2018


This revision was automatically updated to reflect the committed changes.
Closed by commit rL326507: Report an error if you try to link against .dll instead of .lib. (authored by ruiu, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D43964?vs=136611&id=136620#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D43964

Files:
  lld/trunk/COFF/Driver.cpp
  lld/trunk/test/COFF/driver.test


Index: lld/trunk/test/COFF/driver.test
===================================================================
--- lld/trunk/test/COFF/driver.test
+++ lld/trunk/test/COFF/driver.test
@@ -4,3 +4,8 @@
 
 # RUN: lld-link --version | FileCheck -check-prefix=VERSION %s
 VERSION: {{LLD [0-9]+\.[0-9]+}}
+
+# RUN: yaml2obj < %p/Inputs/export.yaml > %t.obj
+# RUN: lld-link /out:%t.dll /dll %t.obj
+# RUN: not lld-link /out:%t.exe %t.dll 2>&1 | FileCheck -check-prefix=BADFILE %s
+BADFILE: bad file type. Did you specify a DLL instead of an import library?
Index: lld/trunk/COFF/Driver.cpp
===================================================================
--- lld/trunk/COFF/Driver.cpp
+++ lld/trunk/COFF/Driver.cpp
@@ -124,39 +124,46 @@
 
 void LinkerDriver::addBuffer(std::unique_ptr<MemoryBuffer> MB,
                              bool WholeArchive) {
+  StringRef Filename = MB->getBufferIdentifier();
+
   MemoryBufferRef MBRef = takeBuffer(std::move(MB));
-  FilePaths.push_back(MBRef.getBufferIdentifier());
+  FilePaths.push_back(Filename);
 
   // File type is detected by contents, not by file extension.
   switch (identify_magic(MBRef.getBuffer())) {
   case file_magic::windows_resource:
     Resources.push_back(MBRef);
     break;
-
   case file_magic::archive:
     if (WholeArchive) {
       std::unique_ptr<Archive> File =
-          CHECK(Archive::create(MBRef),
-                MBRef.getBufferIdentifier() + ": failed to parse archive");
+          CHECK(Archive::create(MBRef), Filename + ": failed to parse archive");
 
       for (MemoryBufferRef M : getArchiveMembers(File.get()))
-        addArchiveBuffer(M, "<whole-archive>", MBRef.getBufferIdentifier());
+        addArchiveBuffer(M, "<whole-archive>", Filename);
       return;
     }
     Symtab->addFile(make<ArchiveFile>(MBRef));
     break;
-
   case file_magic::bitcode:
     Symtab->addFile(make<BitcodeFile>(MBRef));
     break;
-
+  case file_magic::coff_object:
+  case file_magic::coff_import_library:
+    Symtab->addFile(make<ObjFile>(MBRef));
+    break;
   case file_magic::coff_cl_gl_object:
-    error(MBRef.getBufferIdentifier() + ": is not a native COFF file. "
-          "Recompile without /GL");
+    error(Filename + ": is not a native COFF file. Recompile without /GL");
     break;
-
+  case file_magic::pecoff_executable:
+    if (Filename.endswith_lower(".dll")) {
+      error(Filename + ": bad file type. Did you specify a DLL instead of an "
+                       "import library?");
+      break;
+    }
+    LLVM_FALLTHROUGH;
   default:
-    Symtab->addFile(make<ObjFile>(MBRef));
+    error(MBRef.getBufferIdentifier() + ": unknown file type");
     break;
   }
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D43964.136620.patch
Type: text/x-patch
Size: 2671 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180301/88f0e347/attachment.bin>


More information about the llvm-commits mailing list