diff options
author | rdivacky <rdivacky@FreeBSD.org> | 2009-10-14 17:57:32 +0000 |
---|---|---|
committer | rdivacky <rdivacky@FreeBSD.org> | 2009-10-14 17:57:32 +0000 |
commit | cd749a9c07f1de2fb8affde90537efa4bc3e7c54 (patch) | |
tree | b21f6de4e08b89bb7931806bab798fc2a5e3a686 /unittests/VMCore/MetadataTest.cpp | |
parent | 72621d11de5b873f1695f391eb95f0b336c3d2d4 (diff) | |
download | FreeBSD-src-cd749a9c07f1de2fb8affde90537efa4bc3e7c54.zip FreeBSD-src-cd749a9c07f1de2fb8affde90537efa4bc3e7c54.tar.gz |
Update llvm to r84119.
Diffstat (limited to 'unittests/VMCore/MetadataTest.cpp')
-rw-r--r-- | unittests/VMCore/MetadataTest.cpp | 112 |
1 files changed, 63 insertions, 49 deletions
diff --git a/unittests/VMCore/MetadataTest.cpp b/unittests/VMCore/MetadataTest.cpp index 2de3a92..b92b068 100644 --- a/unittests/VMCore/MetadataTest.cpp +++ b/unittests/VMCore/MetadataTest.cpp @@ -10,22 +10,24 @@ #include "gtest/gtest.h" #include "llvm/Constants.h" #include "llvm/Instructions.h" -#include "llvm/MDNode.h" +#include "llvm/Metadata.h" +#include "llvm/Module.h" #include "llvm/Type.h" +#include "llvm/Support/raw_ostream.h" #include "llvm/Support/ValueHandle.h" -#include <sstream> - using namespace llvm; namespace { +LLVMContext &Context = getGlobalContext(); + // Test that construction of MDString with different value produces different // MDString objects, even with the same string pointer and nulls in the string. TEST(MDStringTest, CreateDifferent) { char x[3] = { 'f', 0, 'A' }; - MDString *s1 = MDString::get(&x[0], &x[3]); + MDString *s1 = MDString::get(Context, StringRef(&x[0], 3)); x[2] = 'B'; - MDString *s2 = MDString::get(&x[0], &x[3]); + MDString *s2 = MDString::get(Context, StringRef(&x[0], 3)); EXPECT_NE(s1, s2); } @@ -35,8 +37,8 @@ TEST(MDStringTest, CreateSame) { char x[4] = { 'a', 'b', 'c', 'X' }; char y[4] = { 'a', 'b', 'c', 'Y' }; - MDString *s1 = MDString::get(&x[0], &x[3]); - MDString *s2 = MDString::get(&y[0], &y[3]); + MDString *s1 = MDString::get(Context, StringRef(&x[0], 3)); + MDString *s2 = MDString::get(Context, StringRef(&y[0], 3)); EXPECT_EQ(s1, s2); } @@ -44,11 +46,12 @@ TEST(MDStringTest, CreateSame) { TEST(MDStringTest, PrintingSimple) { char *str = new char[13]; strncpy(str, "testing 1 2 3", 13); - MDString *s = MDString::get(str, str+13); + MDString *s = MDString::get(Context, StringRef(str, 13)); strncpy(str, "aaaaaaaaaaaaa", 13); delete[] str; - std::ostringstream oss; + std::string Str; + raw_string_ostream oss(Str); s->print(oss); EXPECT_STREQ("metadata !\"testing 1 2 3\"", oss.str().c_str()); } @@ -56,8 +59,9 @@ TEST(MDStringTest, PrintingSimple) { // Test printing of MDString with non-printable characters. TEST(MDStringTest, PrintingComplex) { char str[5] = {0, '\n', '"', '\\', -1}; - MDString *s = MDString::get(str+0, str+5); - std::ostringstream oss; + MDString *s = MDString::get(Context, StringRef(str+0, 5)); + std::string Str; + raw_string_ostream oss(Str); s->print(oss); EXPECT_STREQ("metadata !\"\\00\\0A\\22\\5C\\FF\"", oss.str().c_str()); } @@ -67,21 +71,25 @@ TEST(MDNodeTest, Simple) { char x[3] = { 'a', 'b', 'c' }; char y[3] = { '1', '2', '3' }; - MDString *s1 = MDString::get(&x[0], &x[3]); - MDString *s2 = MDString::get(&y[0], &y[3]); - ConstantInt *CI = ConstantInt::get(APInt(8, 0)); + MDString *s1 = MDString::get(Context, StringRef(&x[0], 3)); + MDString *s2 = MDString::get(Context, StringRef(&y[0], 3)); + ConstantInt *CI = ConstantInt::get(getGlobalContext(), APInt(8, 0)); std::vector<Value *> V; V.push_back(s1); V.push_back(CI); V.push_back(s2); - MDNode *n1 = MDNode::get(&V[0], 3); + MDNode *n1 = MDNode::get(Context, &V[0], 3); Value *const c1 = n1; - MDNode *n2 = MDNode::get(&c1, 1); - MDNode *n3 = MDNode::get(&V[0], 3); + MDNode *n2 = MDNode::get(Context, &c1, 1); + MDNode *n3 = MDNode::get(Context, &V[0], 3); EXPECT_NE(n1, n2); +#ifdef ENABLE_MDNODE_UNIQUING EXPECT_EQ(n1, n3); +#else + (void) n3; +#endif EXPECT_EQ(3u, n1->getNumElements()); EXPECT_EQ(s1, n1->getElement(0)); @@ -91,49 +99,55 @@ TEST(MDNodeTest, Simple) { EXPECT_EQ(1u, n2->getNumElements()); EXPECT_EQ(n1, n2->getElement(0)); - std::ostringstream oss1, oss2; - n1->print(oss1); - n2->print(oss2); - EXPECT_STREQ("metadata !{metadata !\"abc\", i8 0, metadata !\"123\"}", - oss1.str().c_str()); - EXPECT_STREQ("metadata !{metadata !{metadata !\"abc\", i8 0, " - "metadata !\"123\"}}", - oss2.str().c_str()); -} - -TEST(MDNodeTest, RAUW) { - Constant *C = ConstantInt::get(Type::Int32Ty, 1); - Instruction *I = new BitCastInst(C, Type::Int32Ty); - - Value *const V1 = I; - MDNode *n1 = MDNode::get(&V1, 1); - WeakVH wn1 = n1; - - Value *const V2 = C; - MDNode *n2 = MDNode::get(&V2, 1); - WeakVH wn2 = n2; - - EXPECT_NE(wn1, wn2); - - I->replaceAllUsesWith(C); - - EXPECT_EQ(wn1, wn2); + std::string Str; + raw_string_ostream oss(Str); + n1->print(oss); + EXPECT_STREQ("!0 = metadata !{metadata !\"abc\", i8 0, metadata !\"123\"}\n", + oss.str().c_str()); + Str.clear(); + n2->print(oss); + EXPECT_STREQ("!0 = metadata !{metadata !1}\n" + "!1 = metadata !{metadata !\"abc\", i8 0, metadata !\"123\"}\n", + oss.str().c_str()); } TEST(MDNodeTest, Delete) { - Constant *C = ConstantInt::get(Type::Int32Ty, 1); - Instruction *I = new BitCastInst(C, Type::Int32Ty); + Constant *C = ConstantInt::get(Type::getInt32Ty(getGlobalContext()), 1); + Instruction *I = new BitCastInst(C, Type::getInt32Ty(getGlobalContext())); Value *const V = I; - MDNode *n = MDNode::get(&V, 1); + MDNode *n = MDNode::get(Context, &V, 1); WeakVH wvh = n; EXPECT_EQ(n, wvh); delete I; - std::ostringstream oss; + std::string Str; + raw_string_ostream oss(Str); wvh->print(oss); - EXPECT_STREQ("metadata !{null}", oss.str().c_str()); + EXPECT_STREQ("!0 = metadata !{null}\n", oss.str().c_str()); +} + +TEST(NamedMDNodeTest, Search) { + Constant *C = ConstantInt::get(Type::getInt32Ty(getGlobalContext()), 1); + Constant *C2 = ConstantInt::get(Type::getInt32Ty(getGlobalContext()), 2); + + Value *const V = C; + Value *const V2 = C2; + MDNode *n = MDNode::get(Context, &V, 1); + MDNode *n2 = MDNode::get(Context, &V2, 1); + + MetadataBase *Nodes[2] = { n, n2 }; + + Module *M = new Module("MyModule", getGlobalContext()); + const char *Name = "llvm.NMD1"; + NamedMDNode *NMD = NamedMDNode::Create(getGlobalContext(), Name, &Nodes[0], 2, M); + std::string Str; + raw_string_ostream oss(Str); + NMD->print(oss); + EXPECT_STREQ("!llvm.NMD1 = !{!0, !1}\n!0 = metadata !{i32 1}\n" + "!1 = metadata !{i32 2}\n", + oss.str().c_str()); } } |