1 //===- llvm/unittest/IR/DebugInfo.cpp - DebugInfo tests -------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "llvm/IR/DebugInfo.h"
11 #include "gtest/gtest.h"
17 TEST(DIDescriptorTest, getFlag) {
19 EXPECT_EQ(DIDescriptor::FlagPublic, DIDescriptor::getFlag("DIFlagPublic"));
20 EXPECT_EQ(DIDescriptor::FlagProtected,
21 DIDescriptor::getFlag("DIFlagProtected"));
22 EXPECT_EQ(DIDescriptor::FlagPrivate, DIDescriptor::getFlag("DIFlagPrivate"));
23 EXPECT_EQ(DIDescriptor::FlagVector, DIDescriptor::getFlag("DIFlagVector"));
24 EXPECT_EQ(DIDescriptor::FlagRValueReference,
25 DIDescriptor::getFlag("DIFlagRValueReference"));
27 // FlagAccessibility shouldn't work.
28 EXPECT_EQ(0u, DIDescriptor::getFlag("DIFlagAccessibility"));
30 // Some other invalid strings.
31 EXPECT_EQ(0u, DIDescriptor::getFlag("FlagVector"));
32 EXPECT_EQ(0u, DIDescriptor::getFlag("Vector"));
33 EXPECT_EQ(0u, DIDescriptor::getFlag("other things"));
34 EXPECT_EQ(0u, DIDescriptor::getFlag("DIFlagOther"));
37 TEST(DIDescriptorTest, getFlagString) {
39 EXPECT_EQ(StringRef("DIFlagPublic"),
40 DIDescriptor::getFlagString(DIDescriptor::FlagPublic));
41 EXPECT_EQ(StringRef("DIFlagProtected"),
42 DIDescriptor::getFlagString(DIDescriptor::FlagProtected));
43 EXPECT_EQ(StringRef("DIFlagPrivate"),
44 DIDescriptor::getFlagString(DIDescriptor::FlagPrivate));
45 EXPECT_EQ(StringRef("DIFlagVector"),
46 DIDescriptor::getFlagString(DIDescriptor::FlagVector));
47 EXPECT_EQ(StringRef("DIFlagRValueReference"),
48 DIDescriptor::getFlagString(DIDescriptor::FlagRValueReference));
50 // FlagAccessibility actually equals FlagPublic.
51 EXPECT_EQ(StringRef("DIFlagPublic"),
52 DIDescriptor::getFlagString(DIDescriptor::FlagAccessibility));
54 // Some other invalid flags.
55 EXPECT_EQ(StringRef(), DIDescriptor::getFlagString(DIDescriptor::FlagPublic |
56 DIDescriptor::FlagVector));
57 EXPECT_EQ(StringRef(),
58 DIDescriptor::getFlagString(DIDescriptor::FlagFwdDecl |
59 DIDescriptor::FlagArtificial));
60 EXPECT_EQ(StringRef(), DIDescriptor::getFlagString(0xffff));
63 TEST(DIDescriptorTest, splitFlags) {
65 #define CHECK_SPLIT(FLAGS, VECTOR, REMAINDER) \
67 SmallVector<unsigned, 8> V; \
68 EXPECT_EQ(REMAINDER, DIDescriptor::splitFlags(FLAGS, V)); \
69 EXPECT_TRUE(makeArrayRef(V).equals(VECTOR)); \
71 CHECK_SPLIT(DIDescriptor::FlagPublic, {DIDescriptor::FlagPublic}, 0u);
72 CHECK_SPLIT(DIDescriptor::FlagProtected, {DIDescriptor::FlagProtected}, 0u);
73 CHECK_SPLIT(DIDescriptor::FlagPrivate, {DIDescriptor::FlagPrivate}, 0u);
74 CHECK_SPLIT(DIDescriptor::FlagVector, {DIDescriptor::FlagVector}, 0u);
75 CHECK_SPLIT(DIDescriptor::FlagRValueReference, {DIDescriptor::FlagRValueReference}, 0u);
76 unsigned Flags[] = {DIDescriptor::FlagFwdDecl, DIDescriptor::FlagVector};
77 CHECK_SPLIT(DIDescriptor::FlagFwdDecl | DIDescriptor::FlagVector, Flags, 0u);
78 CHECK_SPLIT(0x100000u, {}, 0x100000u);
79 CHECK_SPLIT(0x100000u | DIDescriptor::FlagVector, {DIDescriptor::FlagVector},