summaryrefslogtreecommitdiff
path: root/unittests
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-07-17 06:14:03 +0000
committerChris Lattner <sabre@nondot.org>2010-07-17 06:14:03 +0000
commite332553eae20573f22d6d7e909f302c8923b5046 (patch)
treeedec0b668fab963fcd6edce3719e237bf83488c8 /unittests
parent93604b6de20f6a2ce160bfa65ef5d99cc8e577f3 (diff)
downloadllvm-e332553eae20573f22d6d7e909f302c8923b5046.tar.gz
llvm-e332553eae20573f22d6d7e909f302c8923b5046.tar.bz2
llvm-e332553eae20573f22d6d7e909f302c8923b5046.tar.xz
unit test to go along with r108610
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108611 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests')
-rw-r--r--unittests/VMCore/DerivedTypesTest.cpp57
1 files changed, 56 insertions, 1 deletions
diff --git a/unittests/VMCore/DerivedTypesTest.cpp b/unittests/VMCore/DerivedTypesTest.cpp
index 2e0450d6e5..9dea6ff2a9 100644
--- a/unittests/VMCore/DerivedTypesTest.cpp
+++ b/unittests/VMCore/DerivedTypesTest.cpp
@@ -9,13 +9,66 @@
#include "gtest/gtest.h"
#include "../lib/VMCore/LLVMContextImpl.h"
-#include "llvm/Type.h"
#include "llvm/DerivedTypes.h"
#include "llvm/LLVMContext.h"
+#include "llvm/Constants.h"
+#include "llvm/Support/ValueHandle.h"
using namespace llvm;
namespace {
+static void PR7658() {
+ LLVMContext ctx;
+
+ WeakVH NullPtr;
+ PATypeHolder h1;
+ {
+ OpaqueType *o1 = OpaqueType::get(ctx);
+ PointerType *p1 = PointerType::get(o1, 0);
+
+ std::vector<const Type *> t1;
+ t1.push_back(IntegerType::get(ctx, 32));
+ t1.push_back(p1);
+ NullPtr = ConstantPointerNull::get(p1);
+ OpaqueType *o2 = OpaqueType::get (ctx);
+ PointerType *p2 = PointerType::get (o2, 0);
+ t1.push_back(p2);
+
+
+ StructType *s1 = StructType::get(ctx, t1);
+ h1 = s1;
+ o1->refineAbstractTypeTo(s1);
+ o2->refineAbstractTypeTo(h1.get()); // h1 = { i32, \2*, \2* }
+ }
+
+
+ OpaqueType *o3 = OpaqueType::get(ctx);
+ PointerType *p3 = PointerType::get(o3, 0); // p3 = opaque*
+
+ std::vector<const Type *> t2;
+ t2.push_back(IntegerType::get(ctx, 32));
+ t2.push_back(p3);
+
+ std::vector<Constant *> v2;
+ v2.push_back(ConstantInt::get(IntegerType::get(ctx, 32), 14));
+ v2.push_back(ConstantPointerNull::get(p3));
+
+ OpaqueType *o4 = OpaqueType::get(ctx);
+ {
+ PointerType *p4 = PointerType::get(o4, 0);
+ t2.push_back(p4);
+ v2.push_back(ConstantPointerNull::get(p4));
+ }
+
+ WeakVH CS = ConstantStruct::get(ctx, v2, false); // { i32 14, opaque* null, opaque* null}
+
+ StructType *s2 = StructType::get(ctx, t2);
+ PATypeHolder h2(s2);
+ o3->refineAbstractTypeTo(s2);
+ o4->refineAbstractTypeTo(h2.get());
+}
+
+
TEST(OpaqueTypeTest, RegisterWithContext) {
LLVMContext C;
LLVMContextImpl *pImpl = C.pImpl;
@@ -28,6 +81,8 @@ TEST(OpaqueTypeTest, RegisterWithContext) {
EXPECT_EQ(2u, pImpl->OpaqueTypes.size());
}
EXPECT_EQ(1u, pImpl->OpaqueTypes.size());
+
+ PR7658();
}
} // namespace