blob: 93247908d8a77fd263e4c0a93e3771c22f09873a [file] [log] [blame]
Duncan P. N. Exon Smith176b6912014-10-03 20:01:09 +00001//===- llvm/unittest/IR/DebugInfo.cpp - DebugInfo tests -------------------===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Duncan P. N. Exon Smith176b6912014-10-03 20:01:09 +00006//
7//===----------------------------------------------------------------------===//
8
Duncan P. N. Exon Smith5261e4b2015-04-07 01:21:40 +00009#include "llvm/IR/DebugInfoMetadata.h"
Duncan P. N. Exon Smith176b6912014-10-03 20:01:09 +000010#include "gtest/gtest.h"
11
12using namespace llvm;
13
Duncan P. N. Exon Smith176b6912014-10-03 20:01:09 +000014namespace {
15
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000016TEST(DINodeTest, getFlag) {
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000017 // Some valid flags.
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000018 EXPECT_EQ(DINode::FlagPublic, DINode::getFlag("DIFlagPublic"));
19 EXPECT_EQ(DINode::FlagProtected, DINode::getFlag("DIFlagProtected"));
20 EXPECT_EQ(DINode::FlagPrivate, DINode::getFlag("DIFlagPrivate"));
21 EXPECT_EQ(DINode::FlagVector, DINode::getFlag("DIFlagVector"));
22 EXPECT_EQ(DINode::FlagRValueReference,
23 DINode::getFlag("DIFlagRValueReference"));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000024
25 // FlagAccessibility shouldn't work.
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000026 EXPECT_EQ(0u, DINode::getFlag("DIFlagAccessibility"));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000027
28 // Some other invalid strings.
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000029 EXPECT_EQ(0u, DINode::getFlag("FlagVector"));
30 EXPECT_EQ(0u, DINode::getFlag("Vector"));
31 EXPECT_EQ(0u, DINode::getFlag("other things"));
32 EXPECT_EQ(0u, DINode::getFlag("DIFlagOther"));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000033}
34
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000035TEST(DINodeTest, getFlagString) {
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000036 // Some valid flags.
37 EXPECT_EQ(StringRef("DIFlagPublic"),
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000038 DINode::getFlagString(DINode::FlagPublic));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000039 EXPECT_EQ(StringRef("DIFlagProtected"),
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000040 DINode::getFlagString(DINode::FlagProtected));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000041 EXPECT_EQ(StringRef("DIFlagPrivate"),
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000042 DINode::getFlagString(DINode::FlagPrivate));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000043 EXPECT_EQ(StringRef("DIFlagVector"),
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000044 DINode::getFlagString(DINode::FlagVector));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000045 EXPECT_EQ(StringRef("DIFlagRValueReference"),
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000046 DINode::getFlagString(DINode::FlagRValueReference));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000047
48 // FlagAccessibility actually equals FlagPublic.
49 EXPECT_EQ(StringRef("DIFlagPublic"),
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000050 DINode::getFlagString(DINode::FlagAccessibility));
Duncan P. N. Exon Smithc22a5c22015-02-21 00:43:09 +000051
52 // Some other invalid flags.
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +000053 EXPECT_EQ(StringRef(),
54 DINode::getFlagString(DINode::FlagPublic | DINode::FlagVector));
55 EXPECT_EQ(StringRef(), DINode::getFlagString(DINode::FlagFwdDecl |
56 DINode::FlagArtificial));
Leny Kholodov5fcc4182016-09-06 10:46:28 +000057 EXPECT_EQ(StringRef(),
58 DINode::getFlagString(static_cast<DINode::DIFlags>(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 { \
Leny Kholodov5fcc4182016-09-06 10:46:28 +000065 SmallVector<DINode::DIFlags, 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 }
Leny Kholodov5fcc4182016-09-06 10:46:28 +000069 CHECK_SPLIT(DINode::FlagPublic, {DINode::FlagPublic}, DINode::FlagZero);
70 CHECK_SPLIT(DINode::FlagProtected, {DINode::FlagProtected}, DINode::FlagZero);
71 CHECK_SPLIT(DINode::FlagPrivate, {DINode::FlagPrivate}, DINode::FlagZero);
72 CHECK_SPLIT(DINode::FlagVector, {DINode::FlagVector}, DINode::FlagZero);
Leny Kholodov40c62352016-09-06 17:03:02 +000073 CHECK_SPLIT(DINode::FlagRValueReference, {DINode::FlagRValueReference},
74 DINode::FlagZero);
Leny Kholodov5fcc4182016-09-06 10:46:28 +000075 DINode::DIFlags Flags[] = {DINode::FlagFwdDecl, DINode::FlagVector};
Leny Kholodov40c62352016-09-06 17:03:02 +000076 CHECK_SPLIT(DINode::FlagFwdDecl | DINode::FlagVector, Flags,
77 DINode::FlagZero);
Leny Kholodov5fcc4182016-09-06 10:46:28 +000078 CHECK_SPLIT(DINode::FlagZero, {}, DINode::FlagZero);
Duncan P. N. Exon Smith269e38d2015-02-21 00:45:26 +000079#undef CHECK_SPLIT
80}
81
Duncan P. N. Exon Smith176b6912014-10-03 20:01:09 +000082} // end namespace