Add unittest for extreme alignments.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 23 Oct 2014 14:45:19 +0000 (14:45 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 23 Oct 2014 14:45:19 +0000 (14:45 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220483 91177308-0d34-0410-b5e6-96231b3b80d8

unittests/IR/ValueTest.cpp

index dc5794b..4dd0c2c 100644 (file)
@@ -60,6 +60,10 @@ TEST(GlobalTest, CreateAddressSpace) {
                          GlobalVariable::NotThreadLocal,
                          1);
 
+  EXPECT_TRUE(Value::MaximumAlignment == 536870912U);
+  Dummy0->setAlignment(536870912U);
+  EXPECT_EQ(Dummy0->getAlignment(), 536870912U);
+
   // Make sure the address space isn't dropped when returning this.
   Constant *Dummy1 = M->getOrInsertGlobal("dummy", Int32Ty);
   EXPECT_EQ(Dummy0, Dummy1);
@@ -83,4 +87,23 @@ TEST(GlobalTest, CreateAddressSpace) {
   EXPECT_EQ(1u, DummyCast1->getType()->getPointerAddressSpace());
   EXPECT_NE(DummyCast0, DummyCast1) << *DummyCast1;
 }
+
+#ifdef GTEST_HAS_DEATH_TEST
+#ifndef NDEBUG
+TEST(GlobalTest, AlignDeath) {
+  LLVMContext &Ctx = getGlobalContext();
+  std::unique_ptr<Module> M(new Module("TestModule", Ctx));
+  Type *Int32Ty = Type::getInt32Ty(Ctx);
+  GlobalVariable *Var =
+      new GlobalVariable(*M, Int32Ty, true, GlobalValue::ExternalLinkage,
+                         Constant::getAllOnesValue(Int32Ty), "var", nullptr,
+                         GlobalVariable::NotThreadLocal, 1);
+
+  EXPECT_DEATH(Var->setAlignment(536870913U), "Alignment is not a power of 2");
+  EXPECT_DEATH(Var->setAlignment(1073741824U),
+               "Alignment is greater than MaximumAlignment");
+}
+#endif
+#endif
+
 } // end anonymous namespace