#include "llvm/MC/TargetRegistry.h"
#include "llvm/Support/TargetSelect.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/TargetParser/Triple.h"
#include "gtest/gtest.h"

using namespace llvm;

namespace {

class AIXRelocModelTest : public ::testing::Test {
protected:
  static void SetUpTestCase() {
    LLVMInitializePowerPCTargetInfo();
    LLVMInitializePowerPCTarget();
    LLVMInitializePowerPCTargetMC();
  }
};

TEST_F(AIXRelocModelTest, DefalutToPIC) {
  Triple TheTriple(/*ArchStr*/ "powerpc", /*VendorStr*/ "", /*OSStr*/ "aix");
  std::string Error;
  const Target *TheTarget = TargetRegistry::lookupTarget("", TheTriple, Error);
  ASSERT_TRUE(TheTarget) << Error;

  TargetOptions Options;
  // Create a TargetMachine for powerpc--aix target, and deliberately leave its
  // relocation model unset.
  std::unique_ptr<TargetMachine> Target(TheTarget->createTargetMachine(
      /*TT*/ TheTriple, /*CPU*/ "", /*Features*/ "",
      /*Options*/ Options, /*RM*/ std::nullopt, /*CM*/ std::nullopt,
      /*OL*/ CodeGenOptLevel::Default));
  ASSERT_TRUE(Target) << "Could not allocate target machine!";

  // The relocation model on AIX should be forced to PIC regardless.
  EXPECT_TRUE(Target->getRelocationModel() == Reloc::PIC_);
}

} // end of anonymous namespace
