[dsymutil] Don't try to load Swift ASTs as objects.
authorJonas Devlieghere <jonas@devlieghere.com>
Mon, 9 Apr 2018 09:09:59 +0000 (09:09 +0000)
committerJonas Devlieghere <jonas@devlieghere.com>
Mon, 9 Apr 2018 09:09:59 +0000 (09:09 +0000)
With the threading refactoring, loading of object files happens before
checking whether we're dealing with a swift AST. While that's not an
issue per se, it causes a warning to be printed:

  warning: /path/to/a.swiftmodule: The file was not recognized as a valid object file
  note: while processing /path/to/a.swiftmodule

This suppresses the warning by checking for a Swift AST before
attempting to load is as an object file.

rdar://39240444

llvm-svn: 329553

llvm/test/tools/dsymutil/X86/swift-ast-x86_64.test
llvm/tools/dsymutil/DwarfLinker.cpp

index 95f8e4a..e124a9d 100644 (file)
@@ -9,6 +9,7 @@ Compiled with:
   ld swift-ast.o -add_ast_path Inputs/swift-ast.swiftmodule -arch x86_64 -lSystem -macosx_version_min 10.9.0
 
 DSYMUTIL: filename:{{.*}}swift-ast.swiftmodule
+DSYMUTIL-NOT: The file was not recognized as a valid object file
 DSYMUTIL: DEBUG MAP OBJECT:{{.*}}swift-ast.swiftmodule
 
 READOBJ: Name:{{.*}}__swift_ast
index 42f6504..d3a6a15 100644 (file)
@@ -1562,6 +1562,11 @@ private:
     LinkContext(const DebugMap &Map, DwarfLinker &Linker, DebugMapObject &DMO,
                 bool Verbose = false)
         : DMO(DMO), BinHolder(Verbose), RelocMgr(Linker) {
+      // Swift ASTs are not object files.
+      if (DMO.getType() == MachO::N_AST) {
+        ObjectFile = nullptr;
+        return;
+      }
       auto ErrOrObj = Linker.loadObject(BinHolder, DMO, Map);
       ObjectFile = ErrOrObj ? &*ErrOrObj : nullptr;
       DwarfContext = ObjectFile ? DWARFContext::create(*ObjectFile) : nullptr;