xref: /aosp_15_r20/external/llvm/unittests/IR/DebugInfoTest.cpp (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //===- llvm/unittest/IR/DebugInfo.cpp - DebugInfo tests -------------------===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker 
10*9880d681SAndroid Build Coastguard Worker #include "llvm/IR/DebugInfoMetadata.h"
11*9880d681SAndroid Build Coastguard Worker #include "gtest/gtest.h"
12*9880d681SAndroid Build Coastguard Worker 
13*9880d681SAndroid Build Coastguard Worker using namespace llvm;
14*9880d681SAndroid Build Coastguard Worker 
15*9880d681SAndroid Build Coastguard Worker namespace {
16*9880d681SAndroid Build Coastguard Worker 
TEST(DINodeTest,getFlag)17*9880d681SAndroid Build Coastguard Worker TEST(DINodeTest, getFlag) {
18*9880d681SAndroid Build Coastguard Worker   // Some valid flags.
19*9880d681SAndroid Build Coastguard Worker   EXPECT_EQ(DINode::FlagPublic, DINode::getFlag("DIFlagPublic"));
20*9880d681SAndroid Build Coastguard Worker   EXPECT_EQ(DINode::FlagProtected, DINode::getFlag("DIFlagProtected"));
21*9880d681SAndroid Build Coastguard Worker   EXPECT_EQ(DINode::FlagPrivate, DINode::getFlag("DIFlagPrivate"));
22*9880d681SAndroid Build Coastguard Worker   EXPECT_EQ(DINode::FlagVector, DINode::getFlag("DIFlagVector"));
23*9880d681SAndroid Build Coastguard Worker   EXPECT_EQ(DINode::FlagRValueReference,
24*9880d681SAndroid Build Coastguard Worker             DINode::getFlag("DIFlagRValueReference"));
25*9880d681SAndroid Build Coastguard Worker 
26*9880d681SAndroid Build Coastguard Worker   // FlagAccessibility shouldn't work.
27*9880d681SAndroid Build Coastguard Worker   EXPECT_EQ(0u, DINode::getFlag("DIFlagAccessibility"));
28*9880d681SAndroid Build Coastguard Worker 
29*9880d681SAndroid Build Coastguard Worker   // Some other invalid strings.
30*9880d681SAndroid Build Coastguard Worker   EXPECT_EQ(0u, DINode::getFlag("FlagVector"));
31*9880d681SAndroid Build Coastguard Worker   EXPECT_EQ(0u, DINode::getFlag("Vector"));
32*9880d681SAndroid Build Coastguard Worker   EXPECT_EQ(0u, DINode::getFlag("other things"));
33*9880d681SAndroid Build Coastguard Worker   EXPECT_EQ(0u, DINode::getFlag("DIFlagOther"));
34*9880d681SAndroid Build Coastguard Worker }
35*9880d681SAndroid Build Coastguard Worker 
TEST(DINodeTest,getFlagString)36*9880d681SAndroid Build Coastguard Worker TEST(DINodeTest, getFlagString) {
37*9880d681SAndroid Build Coastguard Worker   // Some valid flags.
38*9880d681SAndroid Build Coastguard Worker   EXPECT_EQ(StringRef("DIFlagPublic"),
39*9880d681SAndroid Build Coastguard Worker             DINode::getFlagString(DINode::FlagPublic));
40*9880d681SAndroid Build Coastguard Worker   EXPECT_EQ(StringRef("DIFlagProtected"),
41*9880d681SAndroid Build Coastguard Worker             DINode::getFlagString(DINode::FlagProtected));
42*9880d681SAndroid Build Coastguard Worker   EXPECT_EQ(StringRef("DIFlagPrivate"),
43*9880d681SAndroid Build Coastguard Worker             DINode::getFlagString(DINode::FlagPrivate));
44*9880d681SAndroid Build Coastguard Worker   EXPECT_EQ(StringRef("DIFlagVector"),
45*9880d681SAndroid Build Coastguard Worker             DINode::getFlagString(DINode::FlagVector));
46*9880d681SAndroid Build Coastguard Worker   EXPECT_EQ(StringRef("DIFlagRValueReference"),
47*9880d681SAndroid Build Coastguard Worker             DINode::getFlagString(DINode::FlagRValueReference));
48*9880d681SAndroid Build Coastguard Worker 
49*9880d681SAndroid Build Coastguard Worker   // FlagAccessibility actually equals FlagPublic.
50*9880d681SAndroid Build Coastguard Worker   EXPECT_EQ(StringRef("DIFlagPublic"),
51*9880d681SAndroid Build Coastguard Worker             DINode::getFlagString(DINode::FlagAccessibility));
52*9880d681SAndroid Build Coastguard Worker 
53*9880d681SAndroid Build Coastguard Worker   // Some other invalid flags.
54*9880d681SAndroid Build Coastguard Worker   EXPECT_EQ(StringRef(),
55*9880d681SAndroid Build Coastguard Worker             DINode::getFlagString(DINode::FlagPublic | DINode::FlagVector));
56*9880d681SAndroid Build Coastguard Worker   EXPECT_EQ(StringRef(), DINode::getFlagString(DINode::FlagFwdDecl |
57*9880d681SAndroid Build Coastguard Worker                                                DINode::FlagArtificial));
58*9880d681SAndroid Build Coastguard Worker   EXPECT_EQ(StringRef(), DINode::getFlagString(0xffff));
59*9880d681SAndroid Build Coastguard Worker }
60*9880d681SAndroid Build Coastguard Worker 
TEST(DINodeTest,splitFlags)61*9880d681SAndroid Build Coastguard Worker TEST(DINodeTest, splitFlags) {
62*9880d681SAndroid Build Coastguard Worker // Some valid flags.
63*9880d681SAndroid Build Coastguard Worker #define CHECK_SPLIT(FLAGS, VECTOR, REMAINDER)                                  \
64*9880d681SAndroid Build Coastguard Worker   {                                                                            \
65*9880d681SAndroid Build Coastguard Worker     SmallVector<unsigned, 8> V;                                                \
66*9880d681SAndroid Build Coastguard Worker     EXPECT_EQ(REMAINDER, DINode::splitFlags(FLAGS, V));                        \
67*9880d681SAndroid Build Coastguard Worker     EXPECT_TRUE(makeArrayRef(V).equals(VECTOR));                               \
68*9880d681SAndroid Build Coastguard Worker   }
69*9880d681SAndroid Build Coastguard Worker   CHECK_SPLIT(DINode::FlagPublic, {DINode::FlagPublic}, 0u);
70*9880d681SAndroid Build Coastguard Worker   CHECK_SPLIT(DINode::FlagProtected, {DINode::FlagProtected}, 0u);
71*9880d681SAndroid Build Coastguard Worker   CHECK_SPLIT(DINode::FlagPrivate, {DINode::FlagPrivate}, 0u);
72*9880d681SAndroid Build Coastguard Worker   CHECK_SPLIT(DINode::FlagVector, {DINode::FlagVector}, 0u);
73*9880d681SAndroid Build Coastguard Worker   CHECK_SPLIT(DINode::FlagRValueReference, {DINode::FlagRValueReference}, 0u);
74*9880d681SAndroid Build Coastguard Worker   unsigned Flags[] = {DINode::FlagFwdDecl, DINode::FlagVector};
75*9880d681SAndroid Build Coastguard Worker   CHECK_SPLIT(DINode::FlagFwdDecl | DINode::FlagVector, Flags, 0u);
76*9880d681SAndroid Build Coastguard Worker   CHECK_SPLIT(0x100000u, {}, 0x100000u);
77*9880d681SAndroid Build Coastguard Worker   CHECK_SPLIT(0x100000u | DINode::FlagVector, {DINode::FlagVector}, 0x100000u);
78*9880d681SAndroid Build Coastguard Worker #undef CHECK_SPLIT
79*9880d681SAndroid Build Coastguard Worker }
80*9880d681SAndroid Build Coastguard Worker 
81*9880d681SAndroid Build Coastguard Worker } // end namespace
82