Temporary workaround to fix MSVC 2012 build problems
[oota-llvm.git] / lib / DebugInfo / PDB / DIA / DIARawSymbol.cpp
1 //===- DIARawSymbol.cpp - DIA implementation of IPDBRawSymbol ---*- C++ -*-===//
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/ADT/STLExtras.h"
11 #include "llvm/DebugInfo/PDB/PDBExtras.h"
12 #include "llvm/DebugInfo/PDB/DIA/DIAEnumSymbols.h"
13 #include "llvm/DebugInfo/PDB/DIA/DIARawSymbol.h"
14 #include "llvm/DebugInfo/PDB/DIA/DIASession.h"
15 #include "llvm/Support/ConvertUTF.h"
16 #include "llvm/Support/raw_ostream.h"
17
18 using namespace llvm;
19
20 namespace {
21 template <typename ArgType>
22 ArgType PrivateGetDIAValue(IDiaSymbol *Symbol,
23                            HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {
24   ArgType Value;
25   if (S_OK == (Symbol->*Method)(&Value))
26     return static_cast<ArgType>(Value);
27
28   return ArgType();
29 }
30
31 template <typename ArgType, typename RetType>
32 RetType PrivateGetDIAValue(IDiaSymbol *Symbol,
33                            HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {
34   ArgType Value;
35   if (S_OK == (Symbol->*Method)(&Value))
36     return static_cast<RetType>(Value);
37
38   return RetType();
39 }
40
41 std::string
42 PrivateGetDIAValue(IDiaSymbol *Symbol,
43                    HRESULT (__stdcall IDiaSymbol::*Method)(BSTR *)) {
44   CComBSTR Result16;
45   if (S_OK != (Symbol->*Method)(&Result16))
46     return std::string();
47
48   const char *SrcBytes = reinterpret_cast<const char *>(Result16.m_str);
49   llvm::ArrayRef<char> SrcByteArray(SrcBytes, Result16.ByteLength());
50   std::string Result8;
51   if (!llvm::convertUTF16ToUTF8String(SrcByteArray, Result8))
52     return std::string();
53   return Result8;
54 }
55
56 PDB_UniqueId
57 PrivateGetDIAValue(IDiaSymbol *Symbol,
58                    HRESULT (__stdcall IDiaSymbol::*Method)(GUID *)) {
59   GUID Result;
60   if (S_OK != (Symbol->*Method)(&Result))
61     return PDB_UniqueId();
62
63   static_assert(sizeof(PDB_UniqueId) == sizeof(GUID),
64                 "PDB_UniqueId is the wrong size!");
65   PDB_UniqueId IdResult;
66   ::memcpy(&IdResult, &Result, sizeof(GUID));
67   return IdResult;
68 }
69
70 template <typename ArgType>
71 void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name,
72                   IDiaSymbol *Symbol,
73                   HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {
74   ArgType Value;
75   if (S_OK == (Symbol->*Method)(&Value)) {
76     OS.indent(Indent);
77     OS << Name << ": " << Value << "\n";
78   }
79 }
80
81 void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name,
82                   IDiaSymbol *Symbol,
83                   HRESULT (__stdcall IDiaSymbol::*Method)(BSTR *)) {
84   BSTR Value = nullptr;
85   if (S_OK != (Symbol->*Method)(&Value))
86     return;
87   const char *Bytes = reinterpret_cast<const char *>(Value);
88   ArrayRef<char> ByteArray(Bytes, ::SysStringByteLen(Value));
89   std::string Result;
90   if (llvm::convertUTF16ToUTF8String(ByteArray, Result)) {
91     OS.indent(Indent);
92     OS << Name << ": " << Result << "\n";
93   }
94   ::SysFreeString(Value);
95 }
96 }
97
98 namespace llvm {
99 raw_ostream &operator<<(raw_ostream &OS, const GUID &Guid) {
100   const PDB_UniqueId *Id = reinterpret_cast<const PDB_UniqueId *>(&Guid);
101   OS << *Id;
102   return OS;
103 }
104 }
105
106 DIARawSymbol::DIARawSymbol(const DIASession &PDBSession,
107                            CComPtr<IDiaSymbol> DiaSymbol)
108     : Session(PDBSession), Symbol(DiaSymbol) {}
109
110 #define RAW_METHOD_DUMP(Stream, Method)                                        \
111   DumpDIAValue(Stream, Indent, StringRef(#Method), Symbol, &IDiaSymbol::Method);
112
113 void DIARawSymbol::dump(raw_ostream &OS, int Indent,
114                         PDB_DumpLevel Level) const {
115   RAW_METHOD_DUMP(OS, get_access)
116   RAW_METHOD_DUMP(OS, get_addressOffset)
117   RAW_METHOD_DUMP(OS, get_addressSection)
118   RAW_METHOD_DUMP(OS, get_age)
119   RAW_METHOD_DUMP(OS, get_arrayIndexTypeId)
120   RAW_METHOD_DUMP(OS, get_backEndMajor)
121   RAW_METHOD_DUMP(OS, get_backEndMinor)
122   RAW_METHOD_DUMP(OS, get_backEndBuild)
123   RAW_METHOD_DUMP(OS, get_backEndQFE)
124   RAW_METHOD_DUMP(OS, get_baseDataOffset)
125   RAW_METHOD_DUMP(OS, get_baseDataSlot)
126   RAW_METHOD_DUMP(OS, get_baseSymbolId)
127   RAW_METHOD_DUMP(OS, get_builtInKind)
128   RAW_METHOD_DUMP(OS, get_bitPosition)
129   RAW_METHOD_DUMP(OS, get_callingConvention)
130   RAW_METHOD_DUMP(OS, get_classParentId)
131   RAW_METHOD_DUMP(OS, get_compilerName)
132   RAW_METHOD_DUMP(OS, get_count)
133   RAW_METHOD_DUMP(OS, get_countLiveRanges)
134   RAW_METHOD_DUMP(OS, get_frontEndMajor)
135   RAW_METHOD_DUMP(OS, get_frontEndMinor)
136   RAW_METHOD_DUMP(OS, get_frontEndBuild)
137   RAW_METHOD_DUMP(OS, get_frontEndQFE)
138   RAW_METHOD_DUMP(OS, get_count)
139   RAW_METHOD_DUMP(OS, get_lexicalParentId)
140   RAW_METHOD_DUMP(OS, get_libraryName)
141   RAW_METHOD_DUMP(OS, get_liveRangeStartAddressOffset)
142   RAW_METHOD_DUMP(OS, get_liveRangeStartAddressSection)
143   RAW_METHOD_DUMP(OS, get_liveRangeStartRelativeVirtualAddress)
144   RAW_METHOD_DUMP(OS, get_localBasePointerRegisterId)
145   RAW_METHOD_DUMP(OS, get_lowerBoundId)
146   RAW_METHOD_DUMP(OS, get_memorySpaceKind)
147   RAW_METHOD_DUMP(OS, get_name)
148   RAW_METHOD_DUMP(OS, get_numberOfAcceleratorPointerTags)
149   RAW_METHOD_DUMP(OS, get_numberOfColumns)
150   RAW_METHOD_DUMP(OS, get_numberOfModifiers)
151   RAW_METHOD_DUMP(OS, get_numberOfRegisterIndices)
152   RAW_METHOD_DUMP(OS, get_numberOfRows)
153   RAW_METHOD_DUMP(OS, get_objectFileName)
154   RAW_METHOD_DUMP(OS, get_oemId)
155   RAW_METHOD_DUMP(OS, get_oemSymbolId)
156   RAW_METHOD_DUMP(OS, get_offsetInUdt)
157   RAW_METHOD_DUMP(OS, get_platform)
158   RAW_METHOD_DUMP(OS, get_rank)
159   RAW_METHOD_DUMP(OS, get_registerId)
160   RAW_METHOD_DUMP(OS, get_registerType)
161   RAW_METHOD_DUMP(OS, get_relativeVirtualAddress)
162   RAW_METHOD_DUMP(OS, get_samplerSlot)
163   RAW_METHOD_DUMP(OS, get_signature)
164   RAW_METHOD_DUMP(OS, get_sizeInUdt)
165   RAW_METHOD_DUMP(OS, get_slot)
166   RAW_METHOD_DUMP(OS, get_sourceFileName)
167   RAW_METHOD_DUMP(OS, get_stride)
168   RAW_METHOD_DUMP(OS, get_subTypeId)
169   RAW_METHOD_DUMP(OS, get_symbolsFileName)
170   RAW_METHOD_DUMP(OS, get_symIndexId)
171   RAW_METHOD_DUMP(OS, get_targetOffset)
172   RAW_METHOD_DUMP(OS, get_targetRelativeVirtualAddress)
173   RAW_METHOD_DUMP(OS, get_targetVirtualAddress)
174   RAW_METHOD_DUMP(OS, get_targetSection)
175   RAW_METHOD_DUMP(OS, get_textureSlot)
176   RAW_METHOD_DUMP(OS, get_timeStamp)
177   RAW_METHOD_DUMP(OS, get_token)
178   RAW_METHOD_DUMP(OS, get_typeId)
179   RAW_METHOD_DUMP(OS, get_uavSlot)
180   RAW_METHOD_DUMP(OS, get_undecoratedName)
181   RAW_METHOD_DUMP(OS, get_unmodifiedTypeId)
182   RAW_METHOD_DUMP(OS, get_upperBoundId)
183   RAW_METHOD_DUMP(OS, get_virtualBaseDispIndex)
184   RAW_METHOD_DUMP(OS, get_virtualBaseOffset)
185   RAW_METHOD_DUMP(OS, get_virtualTableShapeId)
186   RAW_METHOD_DUMP(OS, get_dataKind)
187   RAW_METHOD_DUMP(OS, get_symTag)
188   RAW_METHOD_DUMP(OS, get_guid)
189   RAW_METHOD_DUMP(OS, get_offset)
190   RAW_METHOD_DUMP(OS, get_thisAdjust)
191   RAW_METHOD_DUMP(OS, get_virtualBasePointerOffset)
192   RAW_METHOD_DUMP(OS, get_locationType)
193   RAW_METHOD_DUMP(OS, get_machineType)
194   RAW_METHOD_DUMP(OS, get_thunkOrdinal)
195   RAW_METHOD_DUMP(OS, get_length)
196   RAW_METHOD_DUMP(OS, get_liveRangeLength)
197   RAW_METHOD_DUMP(OS, get_virtualAddress)
198   RAW_METHOD_DUMP(OS, get_udtKind)
199   RAW_METHOD_DUMP(OS, get_constructor)
200   RAW_METHOD_DUMP(OS, get_customCallingConvention)
201   RAW_METHOD_DUMP(OS, get_farReturn)
202   RAW_METHOD_DUMP(OS, get_code)
203   RAW_METHOD_DUMP(OS, get_compilerGenerated)
204   RAW_METHOD_DUMP(OS, get_constType)
205   RAW_METHOD_DUMP(OS, get_editAndContinueEnabled)
206   RAW_METHOD_DUMP(OS, get_function)
207   RAW_METHOD_DUMP(OS, get_stride)
208   RAW_METHOD_DUMP(OS, get_noStackOrdering)
209   RAW_METHOD_DUMP(OS, get_hasAlloca)
210   RAW_METHOD_DUMP(OS, get_hasAssignmentOperator)
211   RAW_METHOD_DUMP(OS, get_isCTypes)
212   RAW_METHOD_DUMP(OS, get_hasCastOperator)
213   RAW_METHOD_DUMP(OS, get_hasDebugInfo)
214   RAW_METHOD_DUMP(OS, get_hasEH)
215   RAW_METHOD_DUMP(OS, get_hasEHa)
216   RAW_METHOD_DUMP(OS, get_hasInlAsm)
217   RAW_METHOD_DUMP(OS, get_framePointerPresent)
218   RAW_METHOD_DUMP(OS, get_inlSpec)
219   RAW_METHOD_DUMP(OS, get_interruptReturn)
220   RAW_METHOD_DUMP(OS, get_hasLongJump)
221   RAW_METHOD_DUMP(OS, get_hasManagedCode)
222   RAW_METHOD_DUMP(OS, get_hasNestedTypes)
223   RAW_METHOD_DUMP(OS, get_noInline)
224   RAW_METHOD_DUMP(OS, get_noReturn)
225   RAW_METHOD_DUMP(OS, get_optimizedCodeDebugInfo)
226   RAW_METHOD_DUMP(OS, get_overloadedOperator)
227   RAW_METHOD_DUMP(OS, get_hasSEH)
228   RAW_METHOD_DUMP(OS, get_hasSecurityChecks)
229   RAW_METHOD_DUMP(OS, get_hasSetJump)
230   RAW_METHOD_DUMP(OS, get_strictGSCheck)
231   RAW_METHOD_DUMP(OS, get_isAcceleratorGroupSharedLocal)
232   RAW_METHOD_DUMP(OS, get_isAcceleratorPointerTagLiveRange)
233   RAW_METHOD_DUMP(OS, get_isAcceleratorStubFunction)
234   RAW_METHOD_DUMP(OS, get_isAggregated)
235   RAW_METHOD_DUMP(OS, get_intro)
236   RAW_METHOD_DUMP(OS, get_isCVTCIL)
237   RAW_METHOD_DUMP(OS, get_isConstructorVirtualBase)
238   RAW_METHOD_DUMP(OS, get_isCxxReturnUdt)
239   RAW_METHOD_DUMP(OS, get_isDataAligned)
240   RAW_METHOD_DUMP(OS, get_isHLSLData)
241   RAW_METHOD_DUMP(OS, get_isHotpatchable)
242   RAW_METHOD_DUMP(OS, get_indirectVirtualBaseClass)
243   RAW_METHOD_DUMP(OS, get_isInterfaceUdt)
244   RAW_METHOD_DUMP(OS, get_intrinsic)
245   RAW_METHOD_DUMP(OS, get_isLTCG)
246   RAW_METHOD_DUMP(OS, get_isLocationControlFlowDependent)
247   RAW_METHOD_DUMP(OS, get_isMSILNetmodule)
248   RAW_METHOD_DUMP(OS, get_isMatrixRowMajor)
249   RAW_METHOD_DUMP(OS, get_managed)
250   RAW_METHOD_DUMP(OS, get_msil)
251   RAW_METHOD_DUMP(OS, get_isMultipleInheritance)
252   RAW_METHOD_DUMP(OS, get_isNaked)
253   RAW_METHOD_DUMP(OS, get_nested)
254   RAW_METHOD_DUMP(OS, get_isOptimizedAway)
255   RAW_METHOD_DUMP(OS, get_packed)
256   RAW_METHOD_DUMP(OS, get_isPointerBasedOnSymbolValue)
257   RAW_METHOD_DUMP(OS, get_isPointerToDataMember)
258   RAW_METHOD_DUMP(OS, get_isPointerToMemberFunction)
259   RAW_METHOD_DUMP(OS, get_pure)
260   RAW_METHOD_DUMP(OS, get_RValueReference)
261   RAW_METHOD_DUMP(OS, get_isRefUdt)
262   RAW_METHOD_DUMP(OS, get_reference)
263   RAW_METHOD_DUMP(OS, get_restrictedType)
264   RAW_METHOD_DUMP(OS, get_isReturnValue)
265   RAW_METHOD_DUMP(OS, get_isSafeBuffers)
266   RAW_METHOD_DUMP(OS, get_scoped)
267   RAW_METHOD_DUMP(OS, get_isSdl)
268   RAW_METHOD_DUMP(OS, get_isSingleInheritance)
269   RAW_METHOD_DUMP(OS, get_isSplitted)
270   RAW_METHOD_DUMP(OS, get_isStatic)
271   RAW_METHOD_DUMP(OS, get_isStripped)
272   RAW_METHOD_DUMP(OS, get_unalignedType)
273   RAW_METHOD_DUMP(OS, get_notReached)
274   RAW_METHOD_DUMP(OS, get_isValueUdt)
275   RAW_METHOD_DUMP(OS, get_virtual)
276   RAW_METHOD_DUMP(OS, get_virtualBaseClass)
277   RAW_METHOD_DUMP(OS, get_isVirtualInheritance)
278   RAW_METHOD_DUMP(OS, get_volatileType)
279 }
280
281 std::unique_ptr<IPDBEnumSymbols>
282 DIARawSymbol::findChildren(PDB_SymType Type) const {
283   enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);
284
285   CComPtr<IDiaEnumSymbols> DiaEnumerator;
286   if (S_OK != Symbol->findChildren(EnumVal, nullptr, nsNone, &DiaEnumerator))
287     return nullptr;
288
289   return llvm::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
290 }
291
292 std::unique_ptr<IPDBEnumSymbols>
293 DIARawSymbol::findChildren(PDB_SymType Type, StringRef Name,
294                            PDB_NameSearchFlags Flags) const {
295   llvm::SmallVector<UTF16, 32> Name16;
296   llvm::convertUTF8ToUTF16String(Name, Name16);
297
298   enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);
299   DWORD CompareFlags = static_cast<DWORD>(Flags);
300   wchar_t *Name16Str = reinterpret_cast<wchar_t *>(Name16.data());
301
302   CComPtr<IDiaEnumSymbols> DiaEnumerator;
303   if (S_OK !=
304       Symbol->findChildren(EnumVal, Name16Str, CompareFlags, &DiaEnumerator))
305     return nullptr;
306
307   return llvm::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
308 }
309
310 std::unique_ptr<IPDBEnumSymbols>
311 DIARawSymbol::findChildrenByRVA(PDB_SymType Type, StringRef Name,
312                                 PDB_NameSearchFlags Flags, uint32_t RVA) const {
313   llvm::SmallVector<UTF16, 32> Name16;
314   llvm::convertUTF8ToUTF16String(Name, Name16);
315
316   enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);
317   DWORD CompareFlags = static_cast<DWORD>(Flags);
318   wchar_t *Name16Str = reinterpret_cast<wchar_t *>(Name16.data());
319
320   CComPtr<IDiaEnumSymbols> DiaEnumerator;
321   if (S_OK !=
322       Symbol->findChildrenExByRVA(EnumVal, Name16Str, CompareFlags, RVA,
323                                   &DiaEnumerator))
324     return nullptr;
325
326   return llvm::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
327 }
328
329 std::unique_ptr<IPDBEnumSymbols>
330 DIARawSymbol::findInlineFramesByRVA(uint32_t RVA) const {
331   CComPtr<IDiaEnumSymbols> DiaEnumerator;
332   if (S_OK != Symbol->findInlineFramesByRVA(RVA, &DiaEnumerator))
333     return nullptr;
334
335   return llvm::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
336 }
337
338 void DIARawSymbol::getDataBytes(llvm::SmallVector<uint8_t, 32> &bytes) const {
339   bytes.clear();
340
341   DWORD DataSize = 0;
342   Symbol->get_dataBytes(0, &DataSize, nullptr);
343   if (DataSize == 0)
344     return;
345
346   bytes.resize(DataSize);
347   Symbol->get_dataBytes(DataSize, &DataSize, bytes.data());
348 }
349
350 PDB_MemberAccess DIARawSymbol::getAccess() const {
351   return PrivateGetDIAValue<DWORD, PDB_MemberAccess>(Symbol,
352                                                      &IDiaSymbol::get_access);
353 }
354
355 uint32_t DIARawSymbol::getAddressOffset() const {
356   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressOffset);
357 }
358
359 uint32_t DIARawSymbol::getAddressSection() const {
360   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressSection);
361 }
362
363 uint32_t DIARawSymbol::getAge() const {
364   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_age);
365 }
366
367 uint32_t DIARawSymbol::getArrayIndexTypeId() const {
368   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_arrayIndexTypeId);
369 }
370
371 void DIARawSymbol::getBackEndVersion(VersionInfo &Version) const {
372   Version.Major = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndMajor);
373   Version.Minor = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndMinor);
374   Version.Build = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndBuild);
375   Version.QFE = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndQFE);
376 }
377
378 uint32_t DIARawSymbol::getBaseDataOffset() const {
379   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseDataOffset);
380 }
381
382 uint32_t DIARawSymbol::getBaseDataSlot() const {
383   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseDataSlot);
384 }
385
386 uint32_t DIARawSymbol::getBaseSymbolId() const {
387   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseSymbolId);
388 }
389
390 PDB_BuiltinType DIARawSymbol::getBuiltinType() const {
391   return PrivateGetDIAValue<DWORD, PDB_BuiltinType>(
392       Symbol, &IDiaSymbol::get_builtInKind);
393 }
394
395 uint32_t DIARawSymbol::getBitPosition() const {
396   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_bitPosition);
397 }
398
399 PDB_CallingConv DIARawSymbol::getCallingConvention() const {
400   return PrivateGetDIAValue<DWORD, PDB_CallingConv>(
401       Symbol, &IDiaSymbol::get_callingConvention);
402 }
403
404 uint32_t DIARawSymbol::getClassParentId() const {
405   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_classParentId);
406 }
407
408 std::string DIARawSymbol::getCompilerName() const {
409   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_compilerName);
410 }
411
412 uint32_t DIARawSymbol::getCount() const {
413   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_count);
414 }
415
416 uint32_t DIARawSymbol::getCountLiveRanges() const {
417   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_countLiveRanges);
418 }
419
420 void DIARawSymbol::getFrontEndVersion(VersionInfo &Version) const {
421   Version.Major = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndMajor);
422   Version.Minor = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndMinor);
423   Version.Build = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndBuild);
424   Version.QFE = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndQFE);
425 }
426
427 PDB_Lang DIARawSymbol::getLanguage() const {
428   return PrivateGetDIAValue<DWORD, PDB_Lang>(Symbol, &IDiaSymbol::get_language);
429 }
430
431 uint32_t DIARawSymbol::getLexicalParentId() const {
432   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_lexicalParentId);
433 }
434
435 std::string DIARawSymbol::getLibraryName() const {
436   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_libraryName);
437 }
438
439 uint32_t DIARawSymbol::getLiveRangeStartAddressOffset() const {
440   return PrivateGetDIAValue(Symbol,
441                             &IDiaSymbol::get_liveRangeStartAddressOffset);
442 }
443
444 uint32_t DIARawSymbol::getLiveRangeStartAddressSection() const {
445   return PrivateGetDIAValue(Symbol,
446                             &IDiaSymbol::get_liveRangeStartAddressSection);
447 }
448
449 uint32_t DIARawSymbol::getLiveRangeStartRelativeVirtualAddress() const {
450   return PrivateGetDIAValue(
451       Symbol, &IDiaSymbol::get_liveRangeStartRelativeVirtualAddress);
452 }
453
454 PDB_RegisterId DIARawSymbol::getLocalBasePointerRegisterId() const {
455   return PrivateGetDIAValue<DWORD, PDB_RegisterId>(
456       Symbol, &IDiaSymbol::get_localBasePointerRegisterId);
457 }
458
459 uint32_t DIARawSymbol::getLowerBoundId() const {
460   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_lowerBoundId);
461 }
462
463 uint32_t DIARawSymbol::getMemorySpaceKind() const {
464   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_memorySpaceKind);
465 }
466
467 std::string DIARawSymbol::getName() const {
468   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_name);
469 }
470
471 uint32_t DIARawSymbol::getNumberOfAcceleratorPointerTags() const {
472   return PrivateGetDIAValue(Symbol,
473                             &IDiaSymbol::get_numberOfAcceleratorPointerTags);
474 }
475
476 uint32_t DIARawSymbol::getNumberOfColumns() const {
477   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfColumns);
478 }
479
480 uint32_t DIARawSymbol::getNumberOfModifiers() const {
481   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfModifiers);
482 }
483
484 uint32_t DIARawSymbol::getNumberOfRegisterIndices() const {
485   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfRegisterIndices);
486 }
487
488 uint32_t DIARawSymbol::getNumberOfRows() const {
489   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfRows);
490 }
491
492 std::string DIARawSymbol::getObjectFileName() const {
493   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_objectFileName);
494 }
495
496 uint32_t DIARawSymbol::getOemId() const {
497   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_oemId);
498 }
499
500 uint32_t DIARawSymbol::getOemSymbolId() const {
501   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_oemSymbolId);
502 }
503
504 uint32_t DIARawSymbol::getOffsetInUdt() const {
505   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_offsetInUdt);
506 }
507
508 PDB_Cpu DIARawSymbol::getPlatform() const {
509   return PrivateGetDIAValue<DWORD, PDB_Cpu>(Symbol, &IDiaSymbol::get_platform);
510 }
511
512 uint32_t DIARawSymbol::getRank() const {
513   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_rank);
514 }
515
516 PDB_RegisterId DIARawSymbol::getRegisterId() const {
517   return PrivateGetDIAValue<DWORD, PDB_RegisterId>(Symbol,
518                                                    &IDiaSymbol::get_registerId);
519 }
520
521 uint32_t DIARawSymbol::getRegisterType() const {
522   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_registerType);
523 }
524
525 uint32_t DIARawSymbol::getRelativeVirtualAddress() const {
526   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_relativeVirtualAddress);
527 }
528
529 uint32_t DIARawSymbol::getSamplerSlot() const {
530   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_samplerSlot);
531 }
532
533 uint32_t DIARawSymbol::getSignature() const {
534   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_signature);
535 }
536
537 uint32_t DIARawSymbol::getSizeInUdt() const {
538   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_sizeInUdt);
539 }
540
541 uint32_t DIARawSymbol::getSlot() const {
542   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_slot);
543 }
544
545 std::string DIARawSymbol::getSourceFileName() const {
546   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_sourceFileName);
547 }
548
549 uint32_t DIARawSymbol::getStride() const {
550   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_stride);
551 }
552
553 uint32_t DIARawSymbol::getSubTypeId() const {
554   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_subTypeId);
555 }
556
557 std::string DIARawSymbol::getSymbolsFileName() const {
558   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_symbolsFileName);
559 }
560
561 uint32_t DIARawSymbol::getSymIndexId() const {
562   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_symIndexId);
563 }
564
565 uint32_t DIARawSymbol::getTargetOffset() const {
566   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetOffset);
567 }
568
569 uint32_t DIARawSymbol::getTargetRelativeVirtualAddress() const {
570   return PrivateGetDIAValue(Symbol,
571                             &IDiaSymbol::get_targetRelativeVirtualAddress);
572 }
573
574 uint64_t DIARawSymbol::getTargetVirtualAddress() const {
575   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetVirtualAddress);
576 }
577
578 uint32_t DIARawSymbol::getTargetSection() const {
579   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetSection);
580 }
581
582 uint32_t DIARawSymbol::getTextureSlot() const {
583   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_textureSlot);
584 }
585
586 uint32_t DIARawSymbol::getTimeStamp() const {
587   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_timeStamp);
588 }
589
590 uint32_t DIARawSymbol::getToken() const {
591   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_token);
592 }
593
594 uint32_t DIARawSymbol::getTypeId() const {
595   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_typeId);
596 }
597
598 uint32_t DIARawSymbol::getUavSlot() const {
599   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_uavSlot);
600 }
601
602 std::string DIARawSymbol::getUndecoratedName() const {
603   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_undecoratedName);
604 }
605
606 uint32_t DIARawSymbol::getUnmodifiedTypeId() const {
607   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_unmodifiedTypeId);
608 }
609
610 uint32_t DIARawSymbol::getUpperBoundId() const {
611   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_upperBoundId);
612 }
613
614 uint32_t DIARawSymbol::getVirtualBaseDispIndex() const {
615   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseDispIndex);
616 }
617
618 uint32_t DIARawSymbol::getVirtualBaseOffset() const {
619   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseOffset);
620 }
621
622 uint32_t DIARawSymbol::getVirtualTableShapeId() const {
623   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualTableShapeId);
624 }
625
626 PDB_DataKind DIARawSymbol::getDataKind() const {
627   return PrivateGetDIAValue<DWORD, PDB_DataKind>(Symbol,
628                                                  &IDiaSymbol::get_dataKind);
629 }
630
631 PDB_SymType DIARawSymbol::getSymTag() const {
632   return PrivateGetDIAValue<DWORD, PDB_SymType>(Symbol,
633                                                 &IDiaSymbol::get_symTag);
634 }
635
636 PDB_UniqueId DIARawSymbol::getGuid() const {
637   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_guid);
638 }
639
640 int32_t DIARawSymbol::getOffset() const {
641   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_offset);
642 }
643
644 int32_t DIARawSymbol::getThisAdjust() const {
645   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_thisAdjust);
646 }
647
648 int32_t DIARawSymbol::getVirtualBasePointerOffset() const {
649   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBasePointerOffset);
650 }
651
652 PDB_LocType DIARawSymbol::getLocationType() const {
653   return PrivateGetDIAValue<DWORD, PDB_LocType>(Symbol,
654                                                 &IDiaSymbol::get_locationType);
655 }
656
657 PDB_Machine DIARawSymbol::getMachineType() const {
658   return PrivateGetDIAValue<DWORD, PDB_Machine>(Symbol,
659                                                 &IDiaSymbol::get_machineType);
660 }
661
662 PDB_ThunkOrdinal DIARawSymbol::getThunkOrdinal() const {
663   return PrivateGetDIAValue<DWORD, PDB_ThunkOrdinal>(
664       Symbol, &IDiaSymbol::get_thunkOrdinal);
665 }
666
667 uint64_t DIARawSymbol::getLength() const {
668   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_length);
669 }
670
671 uint64_t DIARawSymbol::getLiveRangeLength() const {
672   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_liveRangeLength);
673 }
674
675 uint64_t DIARawSymbol::getVirtualAddress() const {
676   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualAddress);
677 }
678
679 PDB_UdtType DIARawSymbol::getUdtKind() const {
680   return PrivateGetDIAValue<DWORD, PDB_UdtType>(Symbol,
681                                                 &IDiaSymbol::get_udtKind);
682 }
683
684 bool DIARawSymbol::hasConstructor() const {
685   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_constructor);
686 }
687
688 bool DIARawSymbol::hasCustomCallingConvention() const {
689   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_customCallingConvention);
690 }
691
692 bool DIARawSymbol::hasFarReturn() const {
693   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_farReturn);
694 }
695
696 bool DIARawSymbol::isCode() const {
697   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_code);
698 }
699
700 bool DIARawSymbol::isCompilerGenerated() const {
701   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_compilerGenerated);
702 }
703
704 bool DIARawSymbol::isConstType() const {
705   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_constType);
706 }
707
708 bool DIARawSymbol::isEditAndContinueEnabled() const {
709   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_editAndContinueEnabled);
710 }
711
712 bool DIARawSymbol::isFunction() const {
713   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_function);
714 }
715
716 bool DIARawSymbol::getAddressTaken() const {
717   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressTaken);
718 }
719
720 bool DIARawSymbol::getNoStackOrdering() const {
721   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noStackOrdering);
722 }
723
724 bool DIARawSymbol::hasAlloca() const {
725   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasAlloca);
726 }
727
728 bool DIARawSymbol::hasAssignmentOperator() const {
729   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasAssignmentOperator);
730 }
731
732 bool DIARawSymbol::hasCTypes() const {
733   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCTypes);
734 }
735
736 bool DIARawSymbol::hasCastOperator() const {
737   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasCastOperator);
738 }
739
740 bool DIARawSymbol::hasDebugInfo() const {
741   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasDebugInfo);
742 }
743
744 bool DIARawSymbol::hasEH() const {
745   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasEH);
746 }
747
748 bool DIARawSymbol::hasEHa() const {
749   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasEHa);
750 }
751
752 bool DIARawSymbol::hasInlAsm() const {
753   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasInlAsm);
754 }
755
756 bool DIARawSymbol::hasInlineAttribute() const {
757   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_inlSpec);
758 }
759
760 bool DIARawSymbol::hasInterruptReturn() const {
761   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_interruptReturn);
762 }
763
764 bool DIARawSymbol::hasFramePointer() const {
765   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_framePointerPresent);
766 }
767
768 bool DIARawSymbol::hasLongJump() const {
769   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasLongJump);
770 }
771
772 bool DIARawSymbol::hasManagedCode() const {
773   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasManagedCode);
774 }
775
776 bool DIARawSymbol::hasNestedTypes() const {
777   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasNestedTypes);
778 }
779
780 bool DIARawSymbol::hasNoInlineAttribute() const {
781   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noInline);
782 }
783
784 bool DIARawSymbol::hasNoReturnAttribute() const {
785   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noReturn);
786 }
787
788 bool DIARawSymbol::hasOptimizedCodeDebugInfo() const {
789   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_optimizedCodeDebugInfo);
790 }
791
792 bool DIARawSymbol::hasOverloadedOperator() const {
793   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_overloadedOperator);
794 }
795
796 bool DIARawSymbol::hasSEH() const {
797   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSEH);
798 }
799
800 bool DIARawSymbol::hasSecurityChecks() const {
801   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSecurityChecks);
802 }
803
804 bool DIARawSymbol::hasSetJump() const {
805   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSetJump);
806 }
807
808 bool DIARawSymbol::hasStrictGSCheck() const {
809   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_strictGSCheck);
810 }
811
812 bool DIARawSymbol::isAcceleratorGroupSharedLocal() const {
813   return PrivateGetDIAValue(Symbol,
814                             &IDiaSymbol::get_isAcceleratorGroupSharedLocal);
815 }
816
817 bool DIARawSymbol::isAcceleratorPointerTagLiveRange() const {
818   return PrivateGetDIAValue(Symbol,
819                             &IDiaSymbol::get_isAcceleratorPointerTagLiveRange);
820 }
821
822 bool DIARawSymbol::isAcceleratorStubFunction() const {
823   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isAcceleratorStubFunction);
824 }
825
826 bool DIARawSymbol::isAggregated() const {
827   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isAggregated);
828 }
829
830 bool DIARawSymbol::isIntroVirtualFunction() const {
831   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_intro);
832 }
833
834 bool DIARawSymbol::isCVTCIL() const {
835   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCVTCIL);
836 }
837
838 bool DIARawSymbol::isConstructorVirtualBase() const {
839   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isConstructorVirtualBase);
840 }
841
842 bool DIARawSymbol::isCxxReturnUdt() const {
843   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCxxReturnUdt);
844 }
845
846 bool DIARawSymbol::isDataAligned() const {
847   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isDataAligned);
848 }
849
850 bool DIARawSymbol::isHLSLData() const {
851   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isHLSLData);
852 }
853
854 bool DIARawSymbol::isHotpatchable() const {
855   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isHotpatchable);
856 }
857
858 bool DIARawSymbol::isIndirectVirtualBaseClass() const {
859   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_indirectVirtualBaseClass);
860 }
861
862 bool DIARawSymbol::isInterfaceUdt() const {
863   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isInterfaceUdt);
864 }
865
866 bool DIARawSymbol::isIntrinsic() const {
867   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_intrinsic);
868 }
869
870 bool DIARawSymbol::isLTCG() const {
871   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isLTCG);
872 }
873
874 bool DIARawSymbol::isLocationControlFlowDependent() const {
875   return PrivateGetDIAValue(Symbol,
876                             &IDiaSymbol::get_isLocationControlFlowDependent);
877 }
878
879 bool DIARawSymbol::isMSILNetmodule() const {
880   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMSILNetmodule);
881 }
882
883 bool DIARawSymbol::isMatrixRowMajor() const {
884   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMatrixRowMajor);
885 }
886
887 bool DIARawSymbol::isManagedCode() const {
888   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_managed);
889 }
890
891 bool DIARawSymbol::isMSILCode() const {
892   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_msil);
893 }
894
895 bool DIARawSymbol::isMultipleInheritance() const {
896   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMultipleInheritance);
897 }
898
899 bool DIARawSymbol::isNaked() const {
900   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isNaked);
901 }
902
903 bool DIARawSymbol::isNested() const {
904   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_nested);
905 }
906
907 bool DIARawSymbol::isOptimizedAway() const {
908   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isOptimizedAway);
909 }
910
911 bool DIARawSymbol::isPacked() const {
912   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_packed);
913 }
914
915 bool DIARawSymbol::isPointerBasedOnSymbolValue() const {
916   return PrivateGetDIAValue(Symbol,
917                             &IDiaSymbol::get_isPointerBasedOnSymbolValue);
918 }
919
920 bool DIARawSymbol::isPointerToDataMember() const {
921   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isPointerToDataMember);
922 }
923
924 bool DIARawSymbol::isPointerToMemberFunction() const {
925   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isPointerToMemberFunction);
926 }
927
928 bool DIARawSymbol::isPureVirtual() const {
929   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_pure);
930 }
931
932 bool DIARawSymbol::isRValueReference() const {
933   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_RValueReference);
934 }
935
936 bool DIARawSymbol::isRefUdt() const {
937   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isRefUdt);
938 }
939
940 bool DIARawSymbol::isReference() const {
941   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_reference);
942 }
943
944 bool DIARawSymbol::isRestrictedType() const {
945   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_restrictedType);
946 }
947
948 bool DIARawSymbol::isReturnValue() const {
949   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isReturnValue);
950 }
951
952 bool DIARawSymbol::isSafeBuffers() const {
953   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSafeBuffers);
954 }
955
956 bool DIARawSymbol::isScoped() const {
957   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_scoped);
958 }
959
960 bool DIARawSymbol::isSdl() const {
961   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSdl);
962 }
963
964 bool DIARawSymbol::isSingleInheritance() const {
965   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSingleInheritance);
966 }
967
968 bool DIARawSymbol::isSplitted() const {
969   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSplitted);
970 }
971
972 bool DIARawSymbol::isStatic() const {
973   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isStatic);
974 }
975
976 bool DIARawSymbol::hasPrivateSymbols() const {
977   // hasPrivateSymbols is the opposite of isStripped, but we expose
978   // hasPrivateSymbols as a more intuitive interface.
979   return !PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isStripped);
980 }
981
982 bool DIARawSymbol::isUnalignedType() const {
983   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_unalignedType);
984 }
985
986 bool DIARawSymbol::isUnreached() const {
987   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_notReached);
988 }
989
990 bool DIARawSymbol::isValueUdt() const {
991   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isValueUdt);
992 }
993
994 bool DIARawSymbol::isVirtual() const {
995   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtual);
996 }
997
998 bool DIARawSymbol::isVirtualBaseClass() const {
999   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseClass);
1000 }
1001
1002 bool DIARawSymbol::isVirtualInheritance() const {
1003   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isVirtualInheritance);
1004 }
1005
1006 bool DIARawSymbol::isVolatileType() const {
1007   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_volatileType);
1008 }