1 //===- llvm/unittest/IR/DebugInfo.cpp - DebugInfo tests -------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "llvm/IR/DebugInfoMetadata.h" 11 #include "gtest/gtest.h" 12 13 using namespace llvm; 14 15 namespace { 16 17 TEST(DINodeTest, getFlag) { 18 // Some valid flags. 19 EXPECT_EQ(DINode::FlagPublic, DINode::getFlag("DIFlagPublic")); 20 EXPECT_EQ(DINode::FlagProtected, DINode::getFlag("DIFlagProtected")); 21 EXPECT_EQ(DINode::FlagPrivate, DINode::getFlag("DIFlagPrivate")); 22 EXPECT_EQ(DINode::FlagVector, DINode::getFlag("DIFlagVector")); 23 EXPECT_EQ(DINode::FlagRValueReference, 24 DINode::getFlag("DIFlagRValueReference")); 25 26 // FlagAccessibility shouldn't work. 27 EXPECT_EQ(0u, DINode::getFlag("DIFlagAccessibility")); 28 29 // Some other invalid strings. 30 EXPECT_EQ(0u, DINode::getFlag("FlagVector")); 31 EXPECT_EQ(0u, DINode::getFlag("Vector")); 32 EXPECT_EQ(0u, DINode::getFlag("other things")); 33 EXPECT_EQ(0u, DINode::getFlag("DIFlagOther")); 34 } 35 36 TEST(DINodeTest, getFlagString) { 37 // Some valid flags. 38 EXPECT_EQ(StringRef("DIFlagPublic"), 39 DINode::getFlagString(DINode::FlagPublic)); 40 EXPECT_EQ(StringRef("DIFlagProtected"), 41 DINode::getFlagString(DINode::FlagProtected)); 42 EXPECT_EQ(StringRef("DIFlagPrivate"), 43 DINode::getFlagString(DINode::FlagPrivate)); 44 EXPECT_EQ(StringRef("DIFlagVector"), 45 DINode::getFlagString(DINode::FlagVector)); 46 EXPECT_EQ(StringRef("DIFlagRValueReference"), 47 DINode::getFlagString(DINode::FlagRValueReference)); 48 49 // FlagAccessibility actually equals FlagPublic. 50 EXPECT_EQ(StringRef("DIFlagPublic"), 51 DINode::getFlagString(DINode::FlagAccessibility)); 52 53 // Some other invalid flags. 54 EXPECT_EQ(StringRef(), 55 DINode::getFlagString(DINode::FlagPublic | DINode::FlagVector)); 56 EXPECT_EQ(StringRef(), DINode::getFlagString(DINode::FlagFwdDecl | 57 DINode::FlagArtificial)); 58 EXPECT_EQ(StringRef(), 59 DINode::getFlagString(static_cast<DINode::DIFlags>(0xffff))); 60 } 61 62 TEST(DINodeTest, splitFlags) { 63 // Some valid flags. 64 #define CHECK_SPLIT(FLAGS, VECTOR, REMAINDER) \ 65 { \ 66 SmallVector<DINode::DIFlags, 8> V; \ 67 EXPECT_EQ(REMAINDER, DINode::splitFlags(FLAGS, V)); \ 68 EXPECT_TRUE(makeArrayRef(V).equals(VECTOR)); \ 69 } 70 CHECK_SPLIT(DINode::FlagPublic, {DINode::FlagPublic}, DINode::FlagZero); 71 CHECK_SPLIT(DINode::FlagProtected, {DINode::FlagProtected}, DINode::FlagZero); 72 CHECK_SPLIT(DINode::FlagPrivate, {DINode::FlagPrivate}, DINode::FlagZero); 73 CHECK_SPLIT(DINode::FlagVector, {DINode::FlagVector}, DINode::FlagZero); 74 CHECK_SPLIT(DINode::FlagRValueReference, {DINode::FlagRValueReference}, 75 DINode::FlagZero); 76 DINode::DIFlags Flags[] = {DINode::FlagFwdDecl, DINode::FlagVector}; 77 CHECK_SPLIT(DINode::FlagFwdDecl | DINode::FlagVector, Flags, 78 DINode::FlagZero); 79 CHECK_SPLIT(DINode::FlagZero, {}, DINode::FlagZero); 80 #undef CHECK_SPLIT 81 } 82 83 } // end namespace 84