[llvm] r358825 - [JITLink] Add check to JITLink unit test to bail out for unsupported targets.

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Sat Apr 20 11:30:17 PDT 2019


Author: lhames
Date: Sat Apr 20 11:30:17 2019
New Revision: 358825

URL: http://llvm.org/viewvc/llvm-project?rev=358825&view=rev
Log:
[JITLink] Add check to JITLink unit test to bail out for unsupported targets.

This should prevent spurious JITLink unit test failures for builds that do not
support the target(s) required by the tests.

Modified:
    llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTestCommon.cpp
    llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTestCommon.h
    llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTest_MachO_x86_64_Tests.cpp

Modified: llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTestCommon.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTestCommon.cpp?rev=358825&r1=358824&r2=358825&view=diff
==============================================================================
--- llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTestCommon.cpp (original)
+++ llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTestCommon.cpp Sat Apr 20 11:30:17 2019
@@ -15,14 +15,16 @@
 using namespace llvm::jitlink;
 namespace llvm {
 
-JITLinkTestCommon::TestResources::TestResources(StringRef AsmSrc,
-                                                StringRef TripleStr, bool PIC,
-                                                bool LargeCodeModel,
-                                                MCTargetOptions Options)
-    : ObjStream(ObjBuffer), Options(std::move(Options)) {
-  Triple TT(Triple::normalize(TripleStr));
-  initializeTripleSpecifics(TT);
-  initializeTestSpecifics(AsmSrc, TT, PIC, LargeCodeModel);
+Expected<std::unique_ptr<JITLinkTestCommon::TestResources>>
+JITLinkTestCommon::TestResources::Create(StringRef AsmSrc, StringRef TripleStr,
+                                         bool PIC, bool LargeCodeModel,
+                                         MCTargetOptions Options) {
+  Error Err = Error::success();
+  auto R = std::unique_ptr<TestResources>(new TestResources(
+      AsmSrc, TripleStr, PIC, LargeCodeModel, std::move(Options), Err));
+  if (Err)
+    return std::move(Err);
+  return std::move(R);
 }
 
 MemoryBufferRef
@@ -31,12 +33,27 @@ JITLinkTestCommon::TestResources::getTes
                          "Test object");
 }
 
-void JITLinkTestCommon::TestResources::initializeTripleSpecifics(Triple &TT) {
-  std::string Error;
-  TheTarget = TargetRegistry::lookupTarget("", TT, Error);
+JITLinkTestCommon::TestResources::TestResources(StringRef AsmSrc,
+                                                StringRef TripleStr, bool PIC,
+                                                bool LargeCodeModel,
+                                                MCTargetOptions Options,
+                                                Error &Err)
+    : ObjStream(ObjBuffer), Options(std::move(Options)) {
+  ErrorAsOutParameter _(&Err);
+  Triple TT(Triple::normalize(TripleStr));
+  if (auto Err2 = initializeTripleSpecifics(TT)) {
+    Err = std::move(Err2);
+    return;
+  }
+  initializeTestSpecifics(AsmSrc, TT, PIC, LargeCodeModel);
+}
+
+Error JITLinkTestCommon::TestResources::initializeTripleSpecifics(Triple &TT) {
+  std::string ErrorMsg;
+  TheTarget = TargetRegistry::lookupTarget("", TT, ErrorMsg);
 
   if (!TheTarget)
-    report_fatal_error(Error);
+    return make_error<StringError>(ErrorMsg, inconvertibleErrorCode());
 
   MRI.reset(TheTarget->createMCRegInfo(TT.getTriple()));
   if (!MRI)
@@ -59,6 +76,8 @@ void JITLinkTestCommon::TestResources::i
 
   if (!Dis)
     report_fatal_error("Could not build MCDisassembler");
+
+  return Error::success();
 }
 
 void JITLinkTestCommon::TestResources::initializeTestSpecifics(

Modified: llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTestCommon.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTestCommon.h?rev=358825&r1=358824&r2=358825&view=diff
==============================================================================
--- llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTestCommon.h (original)
+++ llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTestCommon.h Sat Apr 20 11:30:17 2019
@@ -40,15 +40,19 @@ public:
 
   class TestResources {
   public:
-    TestResources(StringRef AsmSrc, StringRef TripleStr, bool PIC,
-                  bool LargeCodeModel, MCTargetOptions Options);
+    static Expected<std::unique_ptr<TestResources>>
+    Create(StringRef AsmSrc, StringRef TripleStr, bool PIC, bool LargeCodeModel,
+           MCTargetOptions Options);
 
     MemoryBufferRef getTestObjectBufferRef() const;
 
     const MCDisassembler &getDisassembler() const { return *Dis; }
 
   private:
-    void initializeTripleSpecifics(Triple &TT);
+    TestResources(StringRef AsmSrc, StringRef TripleStr, bool PIC,
+                  bool LargeCodeModel, MCTargetOptions Options, Error &Err);
+
+    Error initializeTripleSpecifics(Triple &TT);
     void initializeTestSpecifics(StringRef AsmSource, const Triple &TT,
                                  bool PIC, bool LargeCodeModel);
 
@@ -123,11 +127,16 @@ public:
 
   JITLinkTestCommon();
 
-  std::unique_ptr<TestResources>
+  /// Get TestResources for this target/test.
+  ///
+  /// If this method fails it is likely because the target is not supported in
+  /// this build. The test should bail out without failing (possibly logging a
+  /// diagnostic).
+  Expected<std::unique_ptr<TestResources>>
   getTestResources(StringRef AsmSrc, StringRef Triple, bool PIC,
                    bool LargeCodeModel, MCTargetOptions Options) const {
-    return llvm::make_unique<TestResources>(AsmSrc, Triple, PIC, LargeCodeModel,
-                                            std::move(Options));
+    return TestResources::Create(AsmSrc, Triple, PIC, LargeCodeModel,
+                                 std::move(Options));
   }
 
   template <typename T>

Modified: llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTest_MachO_x86_64_Tests.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTest_MachO_x86_64_Tests.cpp?rev=358825&r1=358824&r2=358825&view=diff
==============================================================================
--- llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTest_MachO_x86_64_Tests.cpp (original)
+++ llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTest_MachO_x86_64_Tests.cpp Sat Apr 20 11:30:17 2019
@@ -33,9 +33,14 @@ public:
                                BasicVerifyGraphFunction RunGraphTest) {
     auto TR = getTestResources(AsmSrc, Triple, PIC, LargeCodeModel,
                                std::move(Options));
+    if (!TR) {
+      dbgs() << "Skipping JITLInk unit test: " << toString(TR.takeError())
+             << "\n";
+      return;
+    }
 
     auto JTCtx = llvm::make_unique<TestJITLinkContext>(
-        *TR, [&](AtomGraph &G) { RunGraphTest(G, TR->getDisassembler()); });
+        **TR, [&](AtomGraph &G) { RunGraphTest(G, (*TR)->getDisassembler()); });
 
     JTCtx->externals() = std::move(Externals);
 




More information about the llvm-commits mailing list