From e332553eae20573f22d6d7e909f302c8923b5046 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 17 Jul 2010 06:14:03 +0000 Subject: [PATCH] unit test to go along with r108610 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108611 91177308-0d34-0410-b5e6-96231b3b80d8 --- unittests/VMCore/DerivedTypesTest.cpp | 57 ++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/unittests/VMCore/DerivedTypesTest.cpp b/unittests/VMCore/DerivedTypesTest.cpp index 2e0450d6e5c..9dea6ff2a90 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 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 t2; + t2.push_back(IntegerType::get(ctx, 32)); + t2.push_back(p3); + + std::vector 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