Home | History | Annotate | Download | only in IR
      1 //===- 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 
     10 #include "llvm/IR/DebugInfoMetadata.h"
     11 #include "gtest/gtest.h"
     12 
     13 using namespace llvm;
     14 
     15 namespace {
     16 
     17 TEST(DebugNodeTest, getFlag) {
     18   // Some valid flags.
     19   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"));
     25 
     26   // FlagAccessibility shouldn't work.
     27   EXPECT_EQ(0u, DebugNode::getFlag("DIFlagAccessibility"));
     28 
     29   // Some other invalid strings.
     30   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"));
     34 }
     35 
     36 TEST(DebugNodeTest, getFlagString) {
     37   // Some valid flags.
     38   EXPECT_EQ(StringRef("DIFlagPublic"),
     39             DebugNode::getFlagString(DebugNode::FlagPublic));
     40   EXPECT_EQ(StringRef("DIFlagProtected"),
     41             DebugNode::getFlagString(DebugNode::FlagProtected));
     42   EXPECT_EQ(StringRef("DIFlagPrivate"),
     43             DebugNode::getFlagString(DebugNode::FlagPrivate));
     44   EXPECT_EQ(StringRef("DIFlagVector"),
     45             DebugNode::getFlagString(DebugNode::FlagVector));
     46   EXPECT_EQ(StringRef("DIFlagRValueReference"),
     47             DebugNode::getFlagString(DebugNode::FlagRValueReference));
     48 
     49   // FlagAccessibility actually equals FlagPublic.
     50   EXPECT_EQ(StringRef("DIFlagPublic"),
     51             DebugNode::getFlagString(DebugNode::FlagAccessibility));
     52 
     53   // Some other invalid flags.
     54   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));
     59 }
     60 
     61 TEST(DebugNodeTest, splitFlags) {
     62 // Some valid flags.
     63 #define CHECK_SPLIT(FLAGS, VECTOR, REMAINDER)                                  \
     64   {                                                                            \
     65     SmallVector<unsigned, 8> V;                                                \
     66     EXPECT_EQ(REMAINDER, DebugNode::splitFlags(FLAGS, V));                     \
     67     EXPECT_TRUE(makeArrayRef(V).equals(VECTOR));                               \
     68   }
     69   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);
     77   CHECK_SPLIT(0x100000u, {}, 0x100000u);
     78   CHECK_SPLIT(0x100000u | DebugNode::FlagVector, {DebugNode::FlagVector},
     79               0x100000u);
     80 #undef CHECK_SPLIT
     81 }
     82 
     83 } // end namespace
     84