Coverage for /Syzygy/pe/cvinfo_ext_unittest.cc

CoverageLines executed / instrumented / missingexe / inst / missLanguageGroup
100.0%85850.C++test

Line-by-line coverage:

   1    :  // Copyright 2015 Google Inc. All Rights Reserved.
   2    :  //
   3    :  // Licensed under the Apache License, Version 2.0 (the "License");
   4    :  // you may not use this file except in compliance with the License.
   5    :  // You may obtain a copy of the License at
   6    :  //
   7    :  //     http://www.apache.org/licenses/LICENSE-2.0
   8    :  //
   9    :  // Unless required by applicable law or agreed to in writing, software
  10    :  // distributed under the License is distributed on an "AS IS" BASIS,
  11    :  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12    :  // See the License for the specific language governing permissions and
  13    :  // limitations under the License.
  14    :  
  15    :  #include "syzygy/pe/cvinfo_ext.h"
  16    :  
  17    :  #include "gtest/gtest.h"
  18    :  
  19    :  namespace pe {
  20    :  
  21    :  namespace cci = Microsoft_Cci_Pdb;
  22    :  
  23    :  // This macro checks that an unsigned bit field in a flag-converting union
  24    :  // matches a mask. This is to validate that the physical layout of the union
  25    :  // bitfields matches the masks that originally define these.
  26    :  // @param fld the name of a field in an existing union named "inst".
  27    :  // @param bit_size the bit size of @p fld.
  28    :  // @param mask the mask to test the "raw" member of "inst" against.
  29    :  #define TEST_BITFIELD(fld, bit_size, mask)  \
  30    :    inst.raw = 0;                             \
  31    :    ASSERT_EQ(0, inst.fld);                   \
  32    :    --inst.fld;                               \
  33    :    ASSERT_EQ((1 << bit_size) - 1, inst.fld); \
  34    :    ASSERT_EQ(0, inst.raw & ~mask)
  35    :  
  36  E :  TEST(CVInfoExtTest, LeafMemberAttributeFieldTest) {
  37  E :    LeafMemberAttributeField inst = {};
  38    :  
  39  E :    TEST_BITFIELD(access, 2, cci::access);
  40  E :    TEST_BITFIELD(mprop, 3, cci::mprop);
  41  E :    TEST_BITFIELD(pseudo, 1, cci::pseudo);
  42  E :    TEST_BITFIELD(noinherit, 1, cci::noinherit);
  43  E :    TEST_BITFIELD(noconstruct, 1, cci::noconstruct);
  44  E :    TEST_BITFIELD(compgenx, 1, cci::compgenx);
  45  E :  }
  46    :  
  47  E :  TEST(CVInfoExtTest, LeafPropertyFieldTest) {
  48  E :    LeafPropertyField inst = {};
  49    :  
  50  E :    TEST_BITFIELD(packed, 1, cci::packed);
  51  E :    TEST_BITFIELD(ctor, 1, cci::ctor);
  52  E :    TEST_BITFIELD(ovlops, 1, cci::ovlops);
  53  E :    TEST_BITFIELD(isnested, 1, cci::isnested);
  54  E :    TEST_BITFIELD(cnested, 1, cci::cnested);
  55  E :    TEST_BITFIELD(opassign, 1, cci::opassign);
  56  E :    TEST_BITFIELD(opcast, 1, cci::opcast);
  57  E :    TEST_BITFIELD(fwdref, 1, cci::fwdref);
  58  E :    TEST_BITFIELD(scoped, 1, cci::scoped);
  59  E :    TEST_BITFIELD(decorated_name_present, 1, 0x0200);
  60  E :  }
  61    :  
  62  E :  TEST(CVInfoExtTest, LeafPointerAttributeTest) {
  63  E :    LeafPointerAttribute inst = {};
  64    :  
  65  E :    TEST_BITFIELD(ptrtype, 5, cci::ptrtype);
  66  E :    TEST_BITFIELD(ptrmode, 3, cci::ptrmode);
  67  E :    TEST_BITFIELD(isflat32, 1, cci::isflat32);
  68  E :    TEST_BITFIELD(isvolatile, 1, cci::isvolatile);
  69  E :    TEST_BITFIELD(isconst, 1, cci::isconst);
  70  E :    TEST_BITFIELD(isunaligned, 1, cci::isunaligned);
  71  E :    TEST_BITFIELD(isrestrict, 1, cci::isrestrict);
  72  E :  }
  73    :  
  74  E :  TEST(CVInfoExtTest, LeafModifierAttributeTest) {
  75  E :    LeafModifierAttribute inst = {};
  76    :  
  77  E :    TEST_BITFIELD(mod_const, 1, cci::MOD_const);
  78  E :    TEST_BITFIELD(mod_volatile, 1, cci::MOD_volatile);
  79  E :    TEST_BITFIELD(mod_unaligned, 1, cci::MOD_unaligned);
  80  E :  }
  81    :  
  82  E :  TEST(CVInfoExtTest, CompileSymFlagsTest) {
  83  E :    CompileSymFlags inst = {};
  84    :  
  85  E :    TEST_BITFIELD(iLanguage, 8, cci::iLanguage);
  86  E :    TEST_BITFIELD(fEC, 1, cci::fEC);
  87  E :    TEST_BITFIELD(fNoDbgInfo, 1, cci::fNoDbgInfo);
  88  E :    TEST_BITFIELD(fLTCG, 1, cci::fLTCG);
  89  E :    TEST_BITFIELD(fNoDataAlign, 1, cci::fNoDataAlign);
  90  E :    TEST_BITFIELD(fManagedPresent, 1, cci::fManagedPresent);
  91  E :    TEST_BITFIELD(fSecurityChecks, 1, cci::fSecurityChecks);
  92  E :    TEST_BITFIELD(fHotPatch, 1, cci::fHotPatch);
  93  E :    TEST_BITFIELD(fCVTCIL, 1, cci::fCVTCIL);
  94  E :    TEST_BITFIELD(fMSILModule, 1, cci::fMSILModule);
  95  E :  }
  96    :  
  97  E :  TEST(CVInfoExtTest, LocalVarFlagsTest) {
  98  E :    LocalVarFlags inst = {};
  99    :  
 100  E :    TEST_BITFIELD(fIsParam, 1, cci::fIsParam);
 101  E :    TEST_BITFIELD(fAddrTaken, 1, cci::fAddrTaken);
 102  E :    TEST_BITFIELD(fCompGenx, 1, cci::fCompGenx);
 103  E :    TEST_BITFIELD(fIsAggregate, 1, cci::fIsAggregate);
 104  E :    TEST_BITFIELD(fIsAggregated, 1, cci::fIsAggregated);
 105  E :    TEST_BITFIELD(fIsAliased, 1, cci::fIsAliased);
 106  E :    TEST_BITFIELD(fIsAlias, 1, cci::fIsAlias);
 107  E :  }
 108    :  
 109  E :  TEST(CVInfoExtTest, ExportVarFlagsTest) {
 110  E :    ExportVarFlags inst = {};
 111    :  
 112  E :    TEST_BITFIELD(fConstant, 1, cci::fConstant);
 113  E :    TEST_BITFIELD(fData, 1, cci::fData);
 114  E :    TEST_BITFIELD(fPrivate, 1, cci::fPrivate);
 115  E :    TEST_BITFIELD(fNoName, 1, cci::fNoName);
 116  E :    TEST_BITFIELD(fOrdinal, 1, cci::fOrdinal);
 117  E :    TEST_BITFIELD(fForwarder, 1, cci::fForwarder);
 118  E :  }
 119    :  
 120  E :  TEST(CVInfoExtTest, FrameProcSymFlagsTest) {
 121  E :    FrameProcSymFlags inst = {};
 122    :  
 123  E :    TEST_BITFIELD(fHasAlloca, 1, cci::fHasAlloca);
 124  E :    TEST_BITFIELD(fHasSetJmp, 1, cci::fHasSetJmp);
 125  E :    TEST_BITFIELD(fHasLongJmp, 1, cci::fHasLongJmp);
 126  E :    TEST_BITFIELD(fHasInlAsm, 1, cci::fHasInlAsm);
 127  E :    TEST_BITFIELD(fHasEH, 1, cci::fHasEH);
 128  E :    TEST_BITFIELD(fInlSpec, 1, cci::fInlSpec);
 129  E :    TEST_BITFIELD(fHasSEH, 1, cci::fHasSEH);
 130  E :    TEST_BITFIELD(fNaked, 1, cci::fNaked);
 131  E :    TEST_BITFIELD(fSecurityChecks, 1, 0x100);  // No symbolic constant.
 132  E :    TEST_BITFIELD(fAsyncEH, 1, cci::fAsyncEH);
 133  E :    TEST_BITFIELD(fGSNoStackOrdering, 1, cci::fGSNoStackOrdering);
 134  E :    TEST_BITFIELD(fWasInlined, 1, cci::fWasInlined);
 135  E :  }
 136    :  
 137    :  }  // namespace pe

Coverage information generated Thu Jan 14 17:40:38 2016.