blob: a80df3c54fd4f25b8905cf4d79fe4f8120afbfec [file] [log] [blame]
Duncan P. N. Exon Smith83902832014-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 Smith5f3bcf72015-04-07 01:21:40 +000010#include "llvm/IR/DebugInfoMetadata.h"
Duncan P. N. Exon Smith83902832014-10-03 20:01:09 +000011#include "gtest/gtest.h"
12
13using namespace llvm;
14
Duncan P. N. Exon Smith83902832014-10-03 20:01:09 +000015namespace {
16
Duncan P. N. Exon Smithe56023a2015-04-29 16:38:44 +000017TEST(DINodeTest, getFlag) {
Duncan P. N. Exon Smith2e19fab2015-02-21 00:43:09 +000018 // Some valid flags.
Duncan P. N. Exon Smithe56023a2015-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 Smith2e19fab2015-02-21 00:43:09 +000025
26 // FlagAccessibility shouldn't work.
Duncan P. N. Exon Smithe56023a2015-04-29 16:38:44 +000027 EXPECT_EQ(0u, DINode::getFlag("DIFlagAccessibility"));
Duncan P. N. Exon Smith2e19fab2015-02-21 00:43:09 +000028
29 // Some other invalid strings.
Duncan P. N. Exon Smithe56023a2015-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 Smith2e19fab2015-02-21 00:43:09 +000034}
35
Duncan P. N. Exon Smithe56023a2015-04-29 16:38:44 +000036TEST(DINodeTest, getFlagString) {
Duncan P. N. Exon Smith2e19fab2015-02-21 00:43:09 +000037 // Some valid flags.
38 EXPECT_EQ(StringRef("DIFlagPublic"),
Duncan P. N. Exon Smithe56023a2015-04-29 16:38:44 +000039 DINode::getFlagString(DINode::FlagPublic));
Duncan P. N. Exon Smith2e19fab2015-02-21 00:43:09 +000040 EXPECT_EQ(StringRef("DIFlagProtected"),
Duncan P. N. Exon Smithe56023a2015-04-29 16:38:44 +000041 DINode::getFlagString(DINode::FlagProtected));
Duncan P. N. Exon Smith2e19fab2015-02-21 00:43:09 +000042 EXPECT_EQ(StringRef("DIFlagPrivate"),
Duncan P. N. Exon Smithe56023a2015-04-29 16:38:44 +000043 DINode::getFlagString(DINode::FlagPrivate));
Duncan P. N. Exon Smith2e19fab2015-02-21 00:43:09 +000044 EXPECT_EQ(StringRef("DIFlagVector"),
Duncan P. N. Exon Smithe56023a2015-04-29 16:38:44 +000045 DINode::getFlagString(DINode::FlagVector));
Duncan P. N. Exon Smith2e19fab2015-02-21 00:43:09 +000046 EXPECT_EQ(StringRef("DIFlagRValueReference"),
Duncan P. N. Exon Smithe56023a2015-04-29 16:38:44 +000047 DINode::getFlagString(DINode::FlagRValueReference));
Duncan P. N. Exon Smith2e19fab2015-02-21 00:43:09 +000048
49 // FlagAccessibility actually equals FlagPublic.
50 EXPECT_EQ(StringRef("DIFlagPublic"),
Duncan P. N. Exon Smithe56023a2015-04-29 16:38:44 +000051 DINode::getFlagString(DINode::FlagAccessibility));
Duncan P. N. Exon Smith2e19fab2015-02-21 00:43:09 +000052
53 // Some other invalid flags.
Duncan P. N. Exon Smithe56023a2015-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));
Leny Kholodovd9478f82016-09-06 10:46:28 +000058 EXPECT_EQ(StringRef(),
59 DINode::getFlagString(static_cast<DINode::DIFlags>(0xffff)));
Duncan P. N. Exon Smith2e19fab2015-02-21 00:43:09 +000060}
61
Duncan P. N. Exon Smithe56023a2015-04-29 16:38:44 +000062TEST(DINodeTest, splitFlags) {
Duncan P. N. Exon Smith5f3bcf72015-04-07 01:21:40 +000063// Some valid flags.
Duncan P. N. Exon Smith8629ae22015-02-21 00:45:26 +000064#define CHECK_SPLIT(FLAGS, VECTOR, REMAINDER) \
65 { \
Leny Kholodovd9478f82016-09-06 10:46:28 +000066 SmallVector<DINode::DIFlags, 8> V; \
Duncan P. N. Exon Smithe56023a2015-04-29 16:38:44 +000067 EXPECT_EQ(REMAINDER, DINode::splitFlags(FLAGS, V)); \
Duncan P. N. Exon Smith5f3bcf72015-04-07 01:21:40 +000068 EXPECT_TRUE(makeArrayRef(V).equals(VECTOR)); \
Duncan P. N. Exon Smith8629ae22015-02-21 00:45:26 +000069 }
Leny Kholodovd9478f82016-09-06 10:46:28 +000070 CHECK_SPLIT(DINode::FlagPublic, {DINode::FlagPublic}, DINode::FlagZero);
71 CHECK_SPLIT(DINode::FlagProtected, {DINode::FlagProtected}, DINode::FlagZero);
72 CHECK_SPLIT(DINode::FlagPrivate, {DINode::FlagPrivate}, DINode::FlagZero);
73 CHECK_SPLIT(DINode::FlagVector, {DINode::FlagVector}, DINode::FlagZero);
Leny Kholodov01dd3d92016-09-06 17:03:02 +000074 CHECK_SPLIT(DINode::FlagRValueReference, {DINode::FlagRValueReference},
75 DINode::FlagZero);
Leny Kholodovd9478f82016-09-06 10:46:28 +000076 DINode::DIFlags Flags[] = {DINode::FlagFwdDecl, DINode::FlagVector};
Leny Kholodov01dd3d92016-09-06 17:03:02 +000077 CHECK_SPLIT(DINode::FlagFwdDecl | DINode::FlagVector, Flags,
78 DINode::FlagZero);
Leny Kholodovd9478f82016-09-06 10:46:28 +000079 CHECK_SPLIT(DINode::FlagZero, {}, DINode::FlagZero);
Duncan P. N. Exon Smith8629ae22015-02-21 00:45:26 +000080#undef CHECK_SPLIT
81}
82
Duncan P. N. Exon Smith83902832014-10-03 20:01:09 +000083} // end namespace