[lld] bad1b7f - [ELF] Fix crash when an input is incompatible with a lazy object file

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Sat Feb 5 23:34:19 PST 2022


Author: Fangrui Song
Date: 2022-02-05T23:34:14-08:00
New Revision: bad1b7fbb0fec532f097ac59805562020f895962

URL: https://github.com/llvm/llvm-project/commit/bad1b7fbb0fec532f097ac59805562020f895962
DIFF: https://github.com/llvm/llvm-project/commit/bad1b7fbb0fec532f097ac59805562020f895962.diff

LOG: [ELF] Fix crash when an input is incompatible with a lazy object file

The diagnostic is concise. It is ok because the case is rare.

Added: 
    

Modified: 
    lld/ELF/InputFiles.cpp
    lld/test/ELF/incompatible-ar-first.s

Removed: 
    


################################################################################
diff  --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp
index ebe4f99e84d0e..662ac3360bed3 100644
--- a/lld/ELF/InputFiles.cpp
+++ b/lld/ELF/InputFiles.cpp
@@ -152,18 +152,17 @@ static bool isCompatible(InputFile *file) {
     return false;
   }
 
-  InputFile *existing;
+  InputFile *existing = nullptr;
   if (!objectFiles.empty())
     existing = objectFiles[0];
   else if (!sharedFiles.empty())
     existing = sharedFiles[0];
   else if (!bitcodeFiles.empty())
     existing = bitcodeFiles[0];
-  else
-    llvm_unreachable("Must have -m, OUTPUT_FORMAT or existing input file to "
-                     "determine target emulation");
-
-  error(toString(file) + " is incompatible with " + toString(existing));
+  std::string with;
+  if (existing)
+    with = " with " + toString(existing);
+  error(toString(file) + " is incompatible" + with);
   return false;
 }
 

diff  --git a/lld/test/ELF/incompatible-ar-first.s b/lld/test/ELF/incompatible-ar-first.s
index e49171939513c..a82a55a39ed80 100644
--- a/lld/test/ELF/incompatible-ar-first.s
+++ b/lld/test/ELF/incompatible-ar-first.s
@@ -10,3 +10,6 @@
 // * -m was not used.
 // CHECK: .a({{.*}}a.o) is incompatible with {{.*}}b.o
 
+// RUN: not ld.lld --start-lib %ta.o --end-lib %tb.o -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK2
+
+// CHECK2: {{.*}}b.o is incompatible{{$}}


        


More information about the llvm-commits mailing list