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