//===- llvm/unittest/IR/DebugInfo.cpp - DebugInfo tests -------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/IR/DebugInfoMetadata.h" #include "gtest/gtest.h" using namespace llvm; namespace { TEST(DINodeTest, getFlag) { // Some valid flags. EXPECT_EQ(DINode::FlagPublic, DINode::getFlag("DIFlagPublic")); EXPECT_EQ(DINode::FlagProtected, DINode::getFlag("DIFlagProtected")); EXPECT_EQ(DINode::FlagPrivate, DINode::getFlag("DIFlagPrivate")); EXPECT_EQ(DINode::FlagVector, DINode::getFlag("DIFlagVector")); EXPECT_EQ(DINode::FlagRValueReference, DINode::getFlag("DIFlagRValueReference")); // FlagAccessibility shouldn't work. EXPECT_EQ(0u, DINode::getFlag("DIFlagAccessibility")); // Some other invalid strings. EXPECT_EQ(0u, DINode::getFlag("FlagVector")); EXPECT_EQ(0u, DINode::getFlag("Vector")); EXPECT_EQ(0u, DINode::getFlag("other things")); EXPECT_EQ(0u, DINode::getFlag("DIFlagOther")); } TEST(DINodeTest, getFlagString) { // Some valid flags. EXPECT_EQ(StringRef("DIFlagPublic"), DINode::getFlagString(DINode::FlagPublic)); EXPECT_EQ(StringRef("DIFlagProtected"), DINode::getFlagString(DINode::FlagProtected)); EXPECT_EQ(StringRef("DIFlagPrivate"), DINode::getFlagString(DINode::FlagPrivate)); EXPECT_EQ(StringRef("DIFlagVector"), DINode::getFlagString(DINode::FlagVector)); EXPECT_EQ(StringRef("DIFlagRValueReference"), DINode::getFlagString(DINode::FlagRValueReference)); // FlagAccessibility actually equals FlagPublic. EXPECT_EQ(StringRef("DIFlagPublic"), DINode::getFlagString(DINode::FlagAccessibility)); // Some other invalid flags. EXPECT_EQ(StringRef(), DINode::getFlagString(DINode::FlagPublic | DINode::FlagVector)); EXPECT_EQ(StringRef(), DINode::getFlagString(DINode::FlagFwdDecl | DINode::FlagArtificial)); EXPECT_EQ(StringRef(), DINode::getFlagString(static_cast(0xffff))); } TEST(DINodeTest, splitFlags) { // Some valid flags. #define CHECK_SPLIT(FLAGS, VECTOR, REMAINDER) \ { \ SmallVector V; \ EXPECT_EQ(REMAINDER, DINode::splitFlags(FLAGS, V)); \ EXPECT_TRUE(makeArrayRef(V).equals(VECTOR)); \ } CHECK_SPLIT(DINode::FlagPublic, {DINode::FlagPublic}, DINode::FlagZero); CHECK_SPLIT(DINode::FlagProtected, {DINode::FlagProtected}, DINode::FlagZero); CHECK_SPLIT(DINode::FlagPrivate, {DINode::FlagPrivate}, DINode::FlagZero); CHECK_SPLIT(DINode::FlagVector, {DINode::FlagVector}, DINode::FlagZero); CHECK_SPLIT(DINode::FlagRValueReference, {DINode::FlagRValueReference}, DINode::FlagZero); DINode::DIFlags Flags[] = {DINode::FlagFwdDecl, DINode::FlagVector}; CHECK_SPLIT(DINode::FlagFwdDecl | DINode::FlagVector, Flags, DINode::FlagZero); CHECK_SPLIT(DINode::FlagZero, {}, DINode::FlagZero); #undef CHECK_SPLIT } } // end namespace