blob: f633782b379954eaaadb02af50893eca5cede2d4 [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 Smitha9308c42015-04-29 16:38:44 +000017TEST(DINodeTest, getFlag) {
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000018 // Some valid flags.
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000019 EXPECT_EQ(DINode::FlagPublic, DINode::getFlag("DIFlagPublic"));
20 EXPECT_EQ(DINode::FlagProtected, DINode::getFlag("DIFlagProtected"));
21 EXPECT_EQ(DINode::FlagPrivate, DINode::getFlag("DIFlagPrivate"));
22 EXPECT_EQ(DINode::FlagVector, DINode::getFlag("DIFlagVector"));
23 EXPECT_EQ(DINode::FlagRValueReference,
24 DINode::getFlag("DIFlagRValueReference"));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000025
26 // FlagAccessibility shouldn't work.
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000027 EXPECT_EQ(0u, DINode::getFlag("DIFlagAccessibility"));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000028
29 // Some other invalid strings.
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000030 EXPECT_EQ(0u, DINode::getFlag("FlagVector"));
31 EXPECT_EQ(0u, DINode::getFlag("Vector"));
32 EXPECT_EQ(0u, DINode::getFlag("other things"));
33 EXPECT_EQ(0u, DINode::getFlag("DIFlagOther"));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000034}
35
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000036TEST(DINodeTest, getFlagString) {
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000037 // Some valid flags.
38 EXPECT_EQ(StringRef("DIFlagPublic"),
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000039 DINode::getFlagString(DINode::FlagPublic));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000040 EXPECT_EQ(StringRef("DIFlagProtected"),
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000041 DINode::getFlagString(DINode::FlagProtected));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000042 EXPECT_EQ(StringRef("DIFlagPrivate"),
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000043 DINode::getFlagString(DINode::FlagPrivate));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000044 EXPECT_EQ(StringRef("DIFlagVector"),
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000045 DINode::getFlagString(DINode::FlagVector));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000046 EXPECT_EQ(StringRef("DIFlagRValueReference"),
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000047 DINode::getFlagString(DINode::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 Smitha9308c42015-04-29 16:38:44 +000051 DINode::getFlagString(DINode::FlagAccessibility));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000052
53 // Some other invalid flags.
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000054 EXPECT_EQ(StringRef(),
55 DINode::getFlagString(DINode::FlagPublic | DINode::FlagVector));
56 EXPECT_EQ(StringRef(), DINode::getFlagString(DINode::FlagFwdDecl |
57 DINode::FlagArtificial));
58 EXPECT_EQ(StringRef(), DINode::getFlagString(0xffff));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000059}
60
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000061TEST(DINodeTest, splitFlags) {
Duncan P. N. Exon Smith5261e4b2015-04-07 01:21:40 +000062// 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 Smitha9308c42015-04-29 16:38:44 +000066 EXPECT_EQ(REMAINDER, DINode::splitFlags(FLAGS, V)); \
Duncan P. N. Exon Smith5261e4b2015-04-07 01:21:40 +000067 EXPECT_TRUE(makeArrayRef(V).equals(VECTOR)); \
Duncan P. N. Exon Smith269e38d2015-02-21 00:45:26 +000068 }
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000069 CHECK_SPLIT(DINode::FlagPublic, {DINode::FlagPublic}, 0u);
70 CHECK_SPLIT(DINode::FlagProtected, {DINode::FlagProtected}, 0u);
71 CHECK_SPLIT(DINode::FlagPrivate, {DINode::FlagPrivate}, 0u);
72 CHECK_SPLIT(DINode::FlagVector, {DINode::FlagVector}, 0u);
73 CHECK_SPLIT(DINode::FlagRValueReference, {DINode::FlagRValueReference}, 0u);
74 unsigned Flags[] = {DINode::FlagFwdDecl, DINode::FlagVector};
75 CHECK_SPLIT(DINode::FlagFwdDecl | DINode::FlagVector, Flags, 0u);
Benjamin Kramer0a446fd2015-03-01 21:28:53 +000076 CHECK_SPLIT(0x100000u, {}, 0x100000u);
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000077 CHECK_SPLIT(0x100000u | DINode::FlagVector, {DINode::FlagVector}, 0x100000u);
Duncan P. N. Exon Smith269e38d2015-02-21 00:45:26 +000078#undef CHECK_SPLIT
79}
80
Duncan P. N. Exon Smith176b6912014-10-03 20:01:09 +000081} // end namespace