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