Index: lld/trunk/ELF/SymbolTable.cpp =================================================================== --- lld/trunk/ELF/SymbolTable.cpp +++ lld/trunk/ELF/SymbolTable.cpp @@ -33,9 +33,8 @@ // All input object files must be for the same architecture // (e.g. it does not make sense to link x86 object files with // MIPS object files.) This function checks for that error. -template static bool isCompatible(InputFile *FileP) { - auto *F = dyn_cast>(FileP); - if (!F) +template static bool isCompatible(InputFile *F) { + if (!isa>(F) && !isa(F)) return true; if (F->EKind == Config->EKind && F->EMachine == Config->EMachine) return true; Index: lld/trunk/test/ELF/lto/mix-platforms.ll =================================================================== --- lld/trunk/test/ELF/lto/mix-platforms.ll +++ lld/trunk/test/ELF/lto/mix-platforms.ll @@ -0,0 +1,10 @@ +; REQUIRES: x86 +; RUN: llvm-mc %p/Inputs/shared.s -o %t386.o -filetype=obj -triple=i386-pc-linux +; RUN: ld.lld %t386.o -o %ti386.so -shared +; RUN: llvm-as %s -o %tx64.o +; RUN: not ld.lld %ti386.so %tx64.o -o %t 2>&1 | FileCheck %s + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +; CHECK: {{.*}}x64.o is incompatible with {{.*}}i386.so