+ return error("Cannot link stdin: " + Error);
+ }
+
+ // Determine what variety of file it is.
+ std::string Magic;
+ if (!File.getMagicNumber(Magic, 64))
+ return error("Cannot find linker input '" + File.str() + "'");
+
+ switch (sys::IdentifyFileType(Magic.c_str(), 64)) {
+ default: llvm_unreachable("Bad file type identification");
+ case sys::Unknown_FileType:
+ return warning("Ignoring file '" + File.str() +
+ "' because does not contain bitcode.");
+
+ case sys::Archive_FileType:
+ // A user may specify an ar archive without -l, perhaps because it
+ // is not installed as a library. Detect that and link the archive.
+ if (LinkInArchive(File, is_native))
+ return true;
+ break;
+
+ case sys::Bitcode_FileType: {
+ verbose("Linking bitcode file '" + File.str() + "'");
+ std::auto_ptr<Module> M(LoadObject(File));
+ if (M.get() == 0)
+ return error("Cannot load file '" + File.str() + "': " + Error);
+ if (LinkInModule(M.get(), &Error))
+ return error("Cannot link file '" + File.str() + "': " + Error);
+
+ verbose("Linked in file '" + File.str() + "'");
+ break;
+ }
+
+ case sys::ELF_Relocatable_FileType:
+ case sys::ELF_SharedObject_FileType:
+ case sys::Mach_O_Object_FileType:
+ case sys::Mach_O_FixedVirtualMemorySharedLib_FileType:
+ case sys::Mach_O_DynamicallyLinkedSharedLib_FileType:
+ case sys::Mach_O_DynamicallyLinkedSharedLibStub_FileType:
+ case sys::COFF_FileType:
+ is_native = true;
+ break;