blob: 534663a2da124d6aca261fd46d6b5148f3006417 [file] [log] [blame]
Duncan P. N. Exon Smith176b6912014-10-03 20:01:09 +00001//===- 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
Duncan P. N. Exon Smith5261e4b2015-04-07 01:21:40 +000010#include "llvm/IR/DebugInfoMetadata.h"
Duncan P. N. Exon Smith176b6912014-10-03 20:01:09 +000011#include "gtest/gtest.h"
12
13using namespace llvm;
14
Duncan P. N. Exon Smith176b6912014-10-03 20:01:09 +000015namespace {
16
Duncan P. N. Exon Smith5261e4b2015-04-07 01:21:40 +000017TEST(DebugNodeTest, getFlag) {
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000018 // Some valid flags.
Duncan P. N. Exon Smith5261e4b2015-04-07 01:21:40 +000019 EXPECT_EQ(DebugNode::FlagPublic, DebugNode::getFlag("DIFlagPublic"));
20 EXPECT_EQ(DebugNode::FlagProtected, DebugNode::getFlag("DIFlagProtected"));
21 EXPECT_EQ(DebugNode::FlagPrivate, DebugNode::getFlag("DIFlagPrivate"));
22 EXPECT_EQ(DebugNode::FlagVector, DebugNode::getFlag("DIFlagVector"));
23 EXPECT_EQ(DebugNode::FlagRValueReference,
24 DebugNode::getFlag("DIFlagRValueReference"));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000025
26 // FlagAccessibility shouldn't work.
Duncan P. N. Exon Smith5261e4b2015-04-07 01:21:40 +000027 EXPECT_EQ(0u, DebugNode::getFlag("DIFlagAccessibility"));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000028
29 // Some other invalid strings.
Duncan P. N. Exon Smith5261e4b2015-04-07 01:21:40 +000030 EXPECT_EQ(0u, DebugNode::getFlag("FlagVector"));
31 EXPECT_EQ(0u, DebugNode::getFlag("Vector"));
32 EXPECT_EQ(0u, DebugNode::getFlag("other things"));
33 EXPECT_EQ(0u, DebugNode::getFlag("DIFlagOther"));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000034}
35
Duncan P. N. Exon Smith5261e4b2015-04-07 01:21:40 +000036TEST(DebugNodeTest, getFlagString) {
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000037 // Some valid flags.
38 EXPECT_EQ(StringRef("DIFlagPublic"),
Duncan P. N. Exon Smith5261e4b2015-04-07 01:21:40 +000039 DebugNode::getFlagString(DebugNode::FlagPublic));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000040 EXPECT_EQ(StringRef("DIFlagProtected"),
Duncan P. N. Exon Smith5261e4b2015-04-07 01:21:40 +000041 DebugNode::getFlagString(DebugNode::FlagProtected));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000042 EXPECT_EQ(StringRef("DIFlagPrivate"),
Duncan P. N. Exon Smith5261e4b2015-04-07 01:21:40 +000043 DebugNode::getFlagString(DebugNode::FlagPrivate));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000044 EXPECT_EQ(StringRef("DIFlagVector"),
Duncan P. N. Exon Smith5261e4b2015-04-07 01:21:40 +000045 DebugNode::getFlagString(DebugNode::FlagVector));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000046 EXPECT_EQ(StringRef("DIFlagRValueReference"),
Duncan P. N. Exon Smith5261e4b2015-04-07 01:21:40 +000047 DebugNode::getFlagString(DebugNode::FlagRValueReference));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000048
49 // FlagAccessibility actually equals FlagPublic.
50 EXPECT_EQ(StringRef("DIFlagPublic"),
Duncan P. N. Exon Smith5261e4b2015-04-07 01:21:40 +000051 DebugNode::getFlagString(DebugNode::FlagAccessibility));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000052
53 // Some other invalid flags.
Duncan P. N. Exon Smith5261e4b2015-04-07 01:21:40 +000054 EXPECT_EQ(StringRef(), DebugNode::getFlagString(DebugNode::FlagPublic |
55 DebugNode::FlagVector));
56 EXPECT_EQ(StringRef(), DebugNode::getFlagString(DebugNode::FlagFwdDecl |
57 DebugNode::FlagArtificial));
58 EXPECT_EQ(StringRef(), DebugNode::getFlagString(0xffff));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000059}
60
Duncan P. N. Exon Smith5261e4b2015-04-07 01:21:40 +000061TEST(DebugNodeTest, splitFlags) {
62// Some valid flags.
Duncan P. N. Exon Smith269e38d2015-02-21 00:45:26 +000063#define CHECK_SPLIT(FLAGS, VECTOR, REMAINDER) \
64 { \
65 SmallVector<unsigned, 8> V; \
Duncan P. N. Exon Smith5261e4b2015-04-07 01:21:40 +000066 EXPECT_EQ(REMAINDER, DebugNode::splitFlags(FLAGS, V)); \
67 EXPECT_TRUE(makeArrayRef(V).equals(VECTOR)); \
Duncan P. N. Exon Smith269e38d2015-02-21 00:45:26 +000068 }
Duncan P. N. Exon Smith5261e4b2015-04-07 01:21:40 +000069 CHECK_SPLIT(DebugNode::FlagPublic, {DebugNode::FlagPublic}, 0u);
70 CHECK_SPLIT(DebugNode::FlagProtected, {DebugNode::FlagProtected}, 0u);
71 CHECK_SPLIT(DebugNode::FlagPrivate, {DebugNode::FlagPrivate}, 0u);
72 CHECK_SPLIT(DebugNode::FlagVector, {DebugNode::FlagVector}, 0u);
73 CHECK_SPLIT(DebugNode::FlagRValueReference, {DebugNode::FlagRValueReference},
74 0u);
75 unsigned Flags[] = {DebugNode::FlagFwdDecl, DebugNode::FlagVector};
76 CHECK_SPLIT(DebugNode::FlagFwdDecl | DebugNode::FlagVector, Flags, 0u);
Benjamin Kramer0a446fd2015-03-01 21:28:53 +000077 CHECK_SPLIT(0x100000u, {}, 0x100000u);
Duncan P. N. Exon Smith5261e4b2015-04-07 01:21:40 +000078 CHECK_SPLIT(0x100000u | DebugNode::FlagVector, {DebugNode::FlagVector},
Duncan P. N. Exon Smith269e38d2015-02-21 00:45:26 +000079 0x100000u);
80#undef CHECK_SPLIT
81}
82
Duncan P. N. Exon Smith176b6912014-10-03 20:01:09 +000083} // end namespace