Path: blob/main/contrib/llvm-project/llvm/lib/DebugInfo/PDB/DIA/DIARawSymbol.cpp
35294 views
//===- DIARawSymbol.cpp - DIA implementation of IPDBRawSymbol ---*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "llvm/DebugInfo/PDB/DIA/DIARawSymbol.h"9#include "llvm/ADT/ArrayRef.h"10#include "llvm/ADT/STLExtras.h"11#include "llvm/DebugInfo/CodeView/Formatters.h"12#include "llvm/DebugInfo/PDB/DIA/DIAEnumLineNumbers.h"13#include "llvm/DebugInfo/PDB/DIA/DIAEnumSymbols.h"14#include "llvm/DebugInfo/PDB/DIA/DIALineNumber.h"15#include "llvm/DebugInfo/PDB/DIA/DIASession.h"16#include "llvm/DebugInfo/PDB/DIA/DIAUtils.h"17#include "llvm/DebugInfo/PDB/PDBExtras.h"18#include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h"19#include "llvm/DebugInfo/PDB/PDBSymbolTypePointer.h"20#include "llvm/DebugInfo/PDB/PDBSymbolTypeVTable.h"21#include "llvm/DebugInfo/PDB/PDBSymbolTypeVTableShape.h"22#include "llvm/Support/ConvertUTF.h"23#include "llvm/Support/raw_ostream.h"2425using namespace llvm;26using namespace llvm::pdb;2728namespace {29Variant VariantFromVARIANT(const VARIANT &V) {30Variant Result;31switch (V.vt) {32case VT_I1:33Result.Value.Int8 = V.cVal;34Result.Type = PDB_VariantType::Int8;35break;36case VT_I2:37Result.Value.Int16 = V.iVal;38Result.Type = PDB_VariantType::Int16;39break;40case VT_I4:41Result.Value.Int32 = V.intVal;42Result.Type = PDB_VariantType::Int32;43break;44case VT_I8:45Result.Value.Int64 = V.llVal;46Result.Type = PDB_VariantType::Int64;47break;48case VT_UI1:49Result.Value.UInt8 = V.bVal;50Result.Type = PDB_VariantType::UInt8;51break;52case VT_UI2:53Result.Value.UInt16 = V.uiVal;54Result.Type = PDB_VariantType::UInt16;55break;56case VT_UI4:57Result.Value.UInt32 = V.uintVal;58Result.Type = PDB_VariantType::UInt32;59break;60case VT_UI8:61Result.Value.UInt64 = V.ullVal;62Result.Type = PDB_VariantType::UInt64;63break;64case VT_BOOL:65Result.Value.Bool = (V.boolVal == VARIANT_TRUE) ? true : false;66Result.Type = PDB_VariantType::Bool;67break;68case VT_R4:69Result.Value.Single = V.fltVal;70Result.Type = PDB_VariantType::Single;71break;72case VT_R8:73Result.Value.Double = V.dblVal;74Result.Type = PDB_VariantType::Double;75break;76case VT_BSTR: {77const char *SrcBytes = reinterpret_cast<const char *>(V.bstrVal);78llvm::ArrayRef<char> SrcByteArray(SrcBytes, SysStringByteLen(V.bstrVal));79std::string Result8;80if (!llvm::convertUTF16ToUTF8String(SrcByteArray, Result8))81Result.Value.String = nullptr;82Result.Value.String = new char[Result8.length() + 1];83::strcpy(Result.Value.String, Result8.c_str());84Result.Type = PDB_VariantType::String;85break;86}87default:88Result.Type = PDB_VariantType::Unknown;89break;90}91return Result;92}9394template <typename ArgType>95ArgType PrivateGetDIAValue(IDiaSymbol *Symbol,96HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {97ArgType Value;98if (S_OK == (Symbol->*Method)(&Value))99return static_cast<ArgType>(Value);100101return ArgType();102}103104template <typename ArgType, typename RetType>105RetType PrivateGetDIAValue(IDiaSymbol *Symbol,106HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {107ArgType Value;108if (S_OK == (Symbol->*Method)(&Value))109return static_cast<RetType>(Value);110111return RetType();112}113114std::string115PrivateGetDIAValue(IDiaSymbol *Symbol,116HRESULT (__stdcall IDiaSymbol::*Method)(BSTR *)) {117return invokeBstrMethod(*Symbol, Method);118}119120codeview::GUID121PrivateGetDIAValue(IDiaSymbol *Symbol,122HRESULT (__stdcall IDiaSymbol::*Method)(GUID *)) {123GUID Result;124if (S_OK != (Symbol->*Method)(&Result))125return codeview::GUID();126127static_assert(sizeof(codeview::GUID) == sizeof(GUID),128"GUID is the wrong size!");129codeview::GUID IdResult;130::memcpy(&IdResult, &Result, sizeof(GUID));131return IdResult;132}133134template <typename PrintType, typename ArgType>135void DumpDIAValueAs(llvm::raw_ostream &OS, int Indent, StringRef Name,136IDiaSymbol *Symbol,137HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {138ArgType Value;139if (S_OK == (Symbol->*Method)(&Value))140dumpSymbolField(OS, Name, static_cast<PrintType>(Value), Indent);141}142143void DumpDIAIdValue(llvm::raw_ostream &OS, int Indent, StringRef Name,144IDiaSymbol *Symbol,145HRESULT (__stdcall IDiaSymbol::*Method)(DWORD *),146const IPDBSession &Session, PdbSymbolIdField FieldId,147PdbSymbolIdField ShowFlags, PdbSymbolIdField RecurseFlags) {148DWORD Value;149if (S_OK == (Symbol->*Method)(&Value))150dumpSymbolIdField(OS, Name, Value, Indent, Session, FieldId, ShowFlags,151RecurseFlags);152}153154template <typename ArgType>155void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name,156IDiaSymbol *Symbol,157HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {158ArgType Value;159if (S_OK == (Symbol->*Method)(&Value))160dumpSymbolField(OS, Name, Value, Indent);161}162163void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name,164IDiaSymbol *Symbol,165HRESULT (__stdcall IDiaSymbol::*Method)(BSTR *)) {166BSTR Value = nullptr;167if (S_OK != (Symbol->*Method)(&Value))168return;169const char *Bytes = reinterpret_cast<const char *>(Value);170ArrayRef<char> ByteArray(Bytes, ::SysStringByteLen(Value));171std::string Result;172if (llvm::convertUTF16ToUTF8String(ByteArray, Result))173dumpSymbolField(OS, Name, Result, Indent);174::SysFreeString(Value);175}176177void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name,178IDiaSymbol *Symbol,179HRESULT (__stdcall IDiaSymbol::*Method)(VARIANT *)) {180VARIANT Value;181Value.vt = VT_EMPTY;182if (S_OK != (Symbol->*Method)(&Value))183return;184Variant V = VariantFromVARIANT(Value);185186dumpSymbolField(OS, Name, V, Indent);187}188} // namespace189190namespace llvm {191llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const GUID &G) {192StringRef GuidBytes(reinterpret_cast<const char *>(&G), sizeof(G));193codeview::detail::GuidAdapter A(GuidBytes);194A.format(OS, "");195return OS;196}197} // namespace llvm198199DIARawSymbol::DIARawSymbol(const DIASession &PDBSession,200CComPtr<IDiaSymbol> DiaSymbol)201: Session(PDBSession), Symbol(DiaSymbol) {}202203#define RAW_ID_METHOD_DUMP(Stream, Method, Session, FieldId, ShowFlags, \204RecurseFlags) \205DumpDIAIdValue(Stream, Indent, StringRef{#Method}, Symbol, \206&IDiaSymbol::get_##Method, Session, FieldId, ShowFlags, \207RecurseFlags);208209#define RAW_METHOD_DUMP(Stream, Method) \210DumpDIAValue(Stream, Indent, StringRef{#Method}, Symbol, \211&IDiaSymbol::get_##Method);212213#define RAW_METHOD_DUMP_AS(Stream, Method, Type) \214DumpDIAValueAs<Type>(Stream, Indent, StringRef{#Method}, Symbol, \215&IDiaSymbol::get_##Method);216217void DIARawSymbol::dump(raw_ostream &OS, int Indent,218PdbSymbolIdField ShowIdFields,219PdbSymbolIdField RecurseIdFields) const {220RAW_ID_METHOD_DUMP(OS, symIndexId, Session, PdbSymbolIdField::SymIndexId,221ShowIdFields, RecurseIdFields);222RAW_METHOD_DUMP_AS(OS, symTag, PDB_SymType);223224RAW_METHOD_DUMP(OS, access);225RAW_METHOD_DUMP(OS, addressOffset);226RAW_METHOD_DUMP(OS, addressSection);227RAW_METHOD_DUMP(OS, age);228RAW_METHOD_DUMP(OS, arrayIndexTypeId);229RAW_METHOD_DUMP(OS, backEndMajor);230RAW_METHOD_DUMP(OS, backEndMinor);231RAW_METHOD_DUMP(OS, backEndBuild);232RAW_METHOD_DUMP(OS, backEndQFE);233RAW_METHOD_DUMP(OS, baseDataOffset);234RAW_METHOD_DUMP(OS, baseDataSlot);235RAW_METHOD_DUMP(OS, baseSymbolId);236RAW_METHOD_DUMP_AS(OS, baseType, PDB_BuiltinType);237RAW_METHOD_DUMP(OS, bitPosition);238RAW_METHOD_DUMP_AS(OS, callingConvention, PDB_CallingConv);239RAW_ID_METHOD_DUMP(OS, classParentId, Session, PdbSymbolIdField::ClassParent,240ShowIdFields, RecurseIdFields);241RAW_METHOD_DUMP(OS, compilerName);242RAW_METHOD_DUMP(OS, count);243RAW_METHOD_DUMP(OS, countLiveRanges);244RAW_METHOD_DUMP(OS, frontEndMajor);245RAW_METHOD_DUMP(OS, frontEndMinor);246RAW_METHOD_DUMP(OS, frontEndBuild);247RAW_METHOD_DUMP(OS, frontEndQFE);248RAW_ID_METHOD_DUMP(OS, lexicalParentId, Session,249PdbSymbolIdField::LexicalParent, ShowIdFields,250RecurseIdFields);251RAW_METHOD_DUMP(OS, libraryName);252RAW_METHOD_DUMP(OS, liveRangeStartAddressOffset);253RAW_METHOD_DUMP(OS, liveRangeStartAddressSection);254RAW_METHOD_DUMP(OS, liveRangeStartRelativeVirtualAddress);255RAW_METHOD_DUMP(OS, localBasePointerRegisterId);256RAW_METHOD_DUMP(OS, lowerBoundId);257RAW_METHOD_DUMP(OS, memorySpaceKind);258RAW_METHOD_DUMP(OS, name);259RAW_METHOD_DUMP(OS, numberOfAcceleratorPointerTags);260RAW_METHOD_DUMP(OS, numberOfColumns);261RAW_METHOD_DUMP(OS, numberOfModifiers);262RAW_METHOD_DUMP(OS, numberOfRegisterIndices);263RAW_METHOD_DUMP(OS, numberOfRows);264RAW_METHOD_DUMP(OS, objectFileName);265RAW_METHOD_DUMP(OS, oemId);266RAW_METHOD_DUMP(OS, oemSymbolId);267RAW_METHOD_DUMP(OS, offsetInUdt);268RAW_METHOD_DUMP(OS, platform);269RAW_METHOD_DUMP(OS, rank);270RAW_METHOD_DUMP(OS, registerId);271RAW_METHOD_DUMP(OS, registerType);272RAW_METHOD_DUMP(OS, relativeVirtualAddress);273RAW_METHOD_DUMP(OS, samplerSlot);274RAW_METHOD_DUMP(OS, signature);275RAW_METHOD_DUMP(OS, sizeInUdt);276RAW_METHOD_DUMP(OS, slot);277RAW_METHOD_DUMP(OS, sourceFileName);278RAW_METHOD_DUMP(OS, stride);279RAW_METHOD_DUMP(OS, subTypeId);280RAW_METHOD_DUMP(OS, symbolsFileName);281RAW_METHOD_DUMP(OS, targetOffset);282RAW_METHOD_DUMP(OS, targetRelativeVirtualAddress);283RAW_METHOD_DUMP(OS, targetVirtualAddress);284RAW_METHOD_DUMP(OS, targetSection);285RAW_METHOD_DUMP(OS, textureSlot);286RAW_METHOD_DUMP(OS, timeStamp);287RAW_METHOD_DUMP(OS, token);288RAW_ID_METHOD_DUMP(OS, typeId, Session, PdbSymbolIdField::Type, ShowIdFields,289RecurseIdFields);290RAW_METHOD_DUMP(OS, uavSlot);291RAW_METHOD_DUMP(OS, undecoratedName);292RAW_ID_METHOD_DUMP(OS, unmodifiedTypeId, Session,293PdbSymbolIdField::UnmodifiedType, ShowIdFields,294RecurseIdFields);295RAW_METHOD_DUMP(OS, upperBoundId);296RAW_METHOD_DUMP(OS, virtualBaseDispIndex);297RAW_METHOD_DUMP(OS, virtualBaseOffset);298RAW_METHOD_DUMP(OS, virtualTableShapeId);299RAW_METHOD_DUMP_AS(OS, dataKind, PDB_DataKind);300RAW_METHOD_DUMP(OS, guid);301RAW_METHOD_DUMP(OS, offset);302RAW_METHOD_DUMP(OS, thisAdjust);303RAW_METHOD_DUMP(OS, virtualBasePointerOffset);304RAW_METHOD_DUMP_AS(OS, locationType, PDB_LocType);305RAW_METHOD_DUMP(OS, machineType);306RAW_METHOD_DUMP(OS, thunkOrdinal);307RAW_METHOD_DUMP(OS, length);308RAW_METHOD_DUMP(OS, liveRangeLength);309RAW_METHOD_DUMP(OS, virtualAddress);310RAW_METHOD_DUMP_AS(OS, udtKind, PDB_UdtType);311RAW_METHOD_DUMP(OS, constructor);312RAW_METHOD_DUMP(OS, customCallingConvention);313RAW_METHOD_DUMP(OS, farReturn);314RAW_METHOD_DUMP(OS, code);315RAW_METHOD_DUMP(OS, compilerGenerated);316RAW_METHOD_DUMP(OS, constType);317RAW_METHOD_DUMP(OS, editAndContinueEnabled);318RAW_METHOD_DUMP(OS, function);319RAW_METHOD_DUMP(OS, stride);320RAW_METHOD_DUMP(OS, noStackOrdering);321RAW_METHOD_DUMP(OS, hasAlloca);322RAW_METHOD_DUMP(OS, hasAssignmentOperator);323RAW_METHOD_DUMP(OS, isCTypes);324RAW_METHOD_DUMP(OS, hasCastOperator);325RAW_METHOD_DUMP(OS, hasDebugInfo);326RAW_METHOD_DUMP(OS, hasEH);327RAW_METHOD_DUMP(OS, hasEHa);328RAW_METHOD_DUMP(OS, hasInlAsm);329RAW_METHOD_DUMP(OS, framePointerPresent);330RAW_METHOD_DUMP(OS, inlSpec);331RAW_METHOD_DUMP(OS, interruptReturn);332RAW_METHOD_DUMP(OS, hasLongJump);333RAW_METHOD_DUMP(OS, hasManagedCode);334RAW_METHOD_DUMP(OS, hasNestedTypes);335RAW_METHOD_DUMP(OS, noInline);336RAW_METHOD_DUMP(OS, noReturn);337RAW_METHOD_DUMP(OS, optimizedCodeDebugInfo);338RAW_METHOD_DUMP(OS, overloadedOperator);339RAW_METHOD_DUMP(OS, hasSEH);340RAW_METHOD_DUMP(OS, hasSecurityChecks);341RAW_METHOD_DUMP(OS, hasSetJump);342RAW_METHOD_DUMP(OS, strictGSCheck);343RAW_METHOD_DUMP(OS, isAcceleratorGroupSharedLocal);344RAW_METHOD_DUMP(OS, isAcceleratorPointerTagLiveRange);345RAW_METHOD_DUMP(OS, isAcceleratorStubFunction);346RAW_METHOD_DUMP(OS, isAggregated);347RAW_METHOD_DUMP(OS, intro);348RAW_METHOD_DUMP(OS, isCVTCIL);349RAW_METHOD_DUMP(OS, isConstructorVirtualBase);350RAW_METHOD_DUMP(OS, isCxxReturnUdt);351RAW_METHOD_DUMP(OS, isDataAligned);352RAW_METHOD_DUMP(OS, isHLSLData);353RAW_METHOD_DUMP(OS, isHotpatchable);354RAW_METHOD_DUMP(OS, indirectVirtualBaseClass);355RAW_METHOD_DUMP(OS, isInterfaceUdt);356RAW_METHOD_DUMP(OS, intrinsic);357RAW_METHOD_DUMP(OS, isLTCG);358RAW_METHOD_DUMP(OS, isLocationControlFlowDependent);359RAW_METHOD_DUMP(OS, isMSILNetmodule);360RAW_METHOD_DUMP(OS, isMatrixRowMajor);361RAW_METHOD_DUMP(OS, managed);362RAW_METHOD_DUMP(OS, msil);363RAW_METHOD_DUMP(OS, isMultipleInheritance);364RAW_METHOD_DUMP(OS, isNaked);365RAW_METHOD_DUMP(OS, nested);366RAW_METHOD_DUMP(OS, isOptimizedAway);367RAW_METHOD_DUMP(OS, packed);368RAW_METHOD_DUMP(OS, isPointerBasedOnSymbolValue);369RAW_METHOD_DUMP(OS, isPointerToDataMember);370RAW_METHOD_DUMP(OS, isPointerToMemberFunction);371RAW_METHOD_DUMP(OS, pure);372RAW_METHOD_DUMP(OS, RValueReference);373RAW_METHOD_DUMP(OS, isRefUdt);374RAW_METHOD_DUMP(OS, reference);375RAW_METHOD_DUMP(OS, restrictedType);376RAW_METHOD_DUMP(OS, isReturnValue);377RAW_METHOD_DUMP(OS, isSafeBuffers);378RAW_METHOD_DUMP(OS, scoped);379RAW_METHOD_DUMP(OS, isSdl);380RAW_METHOD_DUMP(OS, isSingleInheritance);381RAW_METHOD_DUMP(OS, isSplitted);382RAW_METHOD_DUMP(OS, isStatic);383RAW_METHOD_DUMP(OS, isStripped);384RAW_METHOD_DUMP(OS, unalignedType);385RAW_METHOD_DUMP(OS, notReached);386RAW_METHOD_DUMP(OS, isValueUdt);387RAW_METHOD_DUMP(OS, virtual);388RAW_METHOD_DUMP(OS, virtualBaseClass);389RAW_METHOD_DUMP(OS, isVirtualInheritance);390RAW_METHOD_DUMP(OS, volatileType);391RAW_METHOD_DUMP(OS, wasInlined);392RAW_METHOD_DUMP(OS, unused);393RAW_METHOD_DUMP(OS, value);394}395396std::unique_ptr<IPDBEnumSymbols>397DIARawSymbol::findChildren(PDB_SymType Type) const {398enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);399400CComPtr<IDiaEnumSymbols> DiaEnumerator;401if (S_OK !=402Symbol->findChildrenEx(EnumVal, nullptr, nsNone, &DiaEnumerator)) {403if (S_OK != Symbol->findChildren(EnumVal, nullptr, nsNone, &DiaEnumerator))404return nullptr;405}406407return std::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);408}409410std::unique_ptr<IPDBEnumSymbols>411DIARawSymbol::findChildren(PDB_SymType Type, StringRef Name,412PDB_NameSearchFlags Flags) const {413llvm::SmallVector<UTF16, 32> Name16;414llvm::convertUTF8ToUTF16String(Name, Name16);415416enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);417DWORD CompareFlags = static_cast<DWORD>(Flags);418wchar_t *Name16Str = reinterpret_cast<wchar_t *>(Name16.data());419420CComPtr<IDiaEnumSymbols> DiaEnumerator;421if (S_OK !=422Symbol->findChildrenEx(EnumVal, Name16Str, CompareFlags, &DiaEnumerator))423return nullptr;424425return std::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);426}427428std::unique_ptr<IPDBEnumSymbols>429DIARawSymbol::findChildrenByAddr(PDB_SymType Type, StringRef Name,430PDB_NameSearchFlags Flags, uint32_t Section,431uint32_t Offset) const {432llvm::SmallVector<UTF16, 32> Name16;433llvm::convertUTF8ToUTF16String(Name, Name16);434435enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);436437DWORD CompareFlags = static_cast<DWORD>(Flags);438wchar_t *Name16Str = reinterpret_cast<wchar_t *>(Name16.data());439440CComPtr<IDiaEnumSymbols> DiaEnumerator;441if (S_OK != Symbol->findChildrenExByAddr(EnumVal, Name16Str, CompareFlags,442Section, Offset, &DiaEnumerator))443return nullptr;444445return std::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);446}447448std::unique_ptr<IPDBEnumSymbols>449DIARawSymbol::findChildrenByVA(PDB_SymType Type, StringRef Name,450PDB_NameSearchFlags Flags, uint64_t VA) const {451llvm::SmallVector<UTF16, 32> Name16;452llvm::convertUTF8ToUTF16String(Name, Name16);453454enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);455456DWORD CompareFlags = static_cast<DWORD>(Flags);457wchar_t *Name16Str = reinterpret_cast<wchar_t *>(Name16.data());458459CComPtr<IDiaEnumSymbols> DiaEnumerator;460if (S_OK != Symbol->findChildrenExByVA(EnumVal, Name16Str, CompareFlags, VA,461&DiaEnumerator))462return nullptr;463464return std::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);465}466467std::unique_ptr<IPDBEnumSymbols>468DIARawSymbol::findChildrenByRVA(PDB_SymType Type, StringRef Name,469PDB_NameSearchFlags Flags, uint32_t RVA) const {470llvm::SmallVector<UTF16, 32> Name16;471llvm::convertUTF8ToUTF16String(Name, Name16);472473enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);474DWORD CompareFlags = static_cast<DWORD>(Flags);475wchar_t *Name16Str = reinterpret_cast<wchar_t *>(Name16.data());476477CComPtr<IDiaEnumSymbols> DiaEnumerator;478if (S_OK != Symbol->findChildrenExByRVA(EnumVal, Name16Str, CompareFlags, RVA,479&DiaEnumerator))480return nullptr;481482return std::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);483}484485std::unique_ptr<IPDBEnumSymbols>486DIARawSymbol::findInlineFramesByAddr(uint32_t Section, uint32_t Offset) const {487CComPtr<IDiaEnumSymbols> DiaEnumerator;488if (S_OK != Symbol->findInlineFramesByAddr(Section, Offset, &DiaEnumerator))489return nullptr;490491return std::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);492}493494std::unique_ptr<IPDBEnumSymbols>495DIARawSymbol::findInlineFramesByRVA(uint32_t RVA) const {496CComPtr<IDiaEnumSymbols> DiaEnumerator;497if (S_OK != Symbol->findInlineFramesByRVA(RVA, &DiaEnumerator))498return nullptr;499500return std::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);501}502503std::unique_ptr<IPDBEnumSymbols>504DIARawSymbol::findInlineFramesByVA(uint64_t VA) const {505CComPtr<IDiaEnumSymbols> DiaEnumerator;506if (S_OK != Symbol->findInlineFramesByVA(VA, &DiaEnumerator))507return nullptr;508509return std::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);510}511512std::unique_ptr<IPDBEnumLineNumbers> DIARawSymbol::findInlineeLines() const {513CComPtr<IDiaEnumLineNumbers> DiaEnumerator;514if (S_OK != Symbol->findInlineeLines(&DiaEnumerator))515return nullptr;516517return std::make_unique<DIAEnumLineNumbers>(DiaEnumerator);518}519520std::unique_ptr<IPDBEnumLineNumbers>521DIARawSymbol::findInlineeLinesByAddr(uint32_t Section, uint32_t Offset,522uint32_t Length) const {523CComPtr<IDiaEnumLineNumbers> DiaEnumerator;524if (S_OK !=525Symbol->findInlineeLinesByAddr(Section, Offset, Length, &DiaEnumerator))526return nullptr;527528return std::make_unique<DIAEnumLineNumbers>(DiaEnumerator);529}530531std::unique_ptr<IPDBEnumLineNumbers>532DIARawSymbol::findInlineeLinesByRVA(uint32_t RVA, uint32_t Length) const {533CComPtr<IDiaEnumLineNumbers> DiaEnumerator;534if (S_OK != Symbol->findInlineeLinesByRVA(RVA, Length, &DiaEnumerator))535return nullptr;536537return std::make_unique<DIAEnumLineNumbers>(DiaEnumerator);538}539540std::unique_ptr<IPDBEnumLineNumbers>541DIARawSymbol::findInlineeLinesByVA(uint64_t VA, uint32_t Length) const {542CComPtr<IDiaEnumLineNumbers> DiaEnumerator;543if (S_OK != Symbol->findInlineeLinesByVA(VA, Length, &DiaEnumerator))544return nullptr;545546return std::make_unique<DIAEnumLineNumbers>(DiaEnumerator);547}548549void DIARawSymbol::getDataBytes(llvm::SmallVector<uint8_t, 32> &bytes) const {550bytes.clear();551552DWORD DataSize = 0;553Symbol->get_dataBytes(0, &DataSize, nullptr);554if (DataSize == 0)555return;556557bytes.resize(DataSize);558Symbol->get_dataBytes(DataSize, &DataSize, bytes.data());559}560561std::string DIARawSymbol::getUndecoratedNameEx(PDB_UndnameFlags Flags) const {562CComBSTR Result16;563if (S_OK != Symbol->get_undecoratedNameEx((DWORD)Flags, &Result16))564return std::string();565566const char *SrcBytes = reinterpret_cast<const char *>(Result16.m_str);567llvm::ArrayRef<char> SrcByteArray(SrcBytes, Result16.ByteLength());568std::string Result8;569if (!llvm::convertUTF16ToUTF8String(SrcByteArray, Result8))570return std::string();571return Result8;572}573574PDB_MemberAccess DIARawSymbol::getAccess() const {575return PrivateGetDIAValue<DWORD, PDB_MemberAccess>(Symbol,576&IDiaSymbol::get_access);577}578579uint32_t DIARawSymbol::getAddressOffset() const {580return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressOffset);581}582583uint32_t DIARawSymbol::getAddressSection() const {584return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressSection);585}586587uint32_t DIARawSymbol::getAge() const {588return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_age);589}590591SymIndexId DIARawSymbol::getArrayIndexTypeId() const {592return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_arrayIndexTypeId);593}594595void DIARawSymbol::getBackEndVersion(VersionInfo &Version) const {596Version.Major = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndMajor);597Version.Minor = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndMinor);598Version.Build = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndBuild);599Version.QFE = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndQFE);600}601602uint32_t DIARawSymbol::getBaseDataOffset() const {603return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseDataOffset);604}605606uint32_t DIARawSymbol::getBaseDataSlot() const {607return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseDataSlot);608}609610SymIndexId DIARawSymbol::getBaseSymbolId() const {611return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseSymbolId);612}613614PDB_BuiltinType DIARawSymbol::getBuiltinType() const {615return PrivateGetDIAValue<DWORD, PDB_BuiltinType>(Symbol,616&IDiaSymbol::get_baseType);617}618619uint32_t DIARawSymbol::getBitPosition() const {620return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_bitPosition);621}622623PDB_CallingConv DIARawSymbol::getCallingConvention() const {624return PrivateGetDIAValue<DWORD, PDB_CallingConv>(625Symbol, &IDiaSymbol::get_callingConvention);626}627628SymIndexId DIARawSymbol::getClassParentId() const {629return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_classParentId);630}631632std::string DIARawSymbol::getCompilerName() const {633return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_compilerName);634}635636uint32_t DIARawSymbol::getCount() const {637return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_count);638}639640uint32_t DIARawSymbol::getCountLiveRanges() const {641return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_countLiveRanges);642}643644void DIARawSymbol::getFrontEndVersion(VersionInfo &Version) const {645Version.Major = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndMajor);646Version.Minor = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndMinor);647Version.Build = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndBuild);648Version.QFE = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndQFE);649}650651PDB_Lang DIARawSymbol::getLanguage() const {652return PrivateGetDIAValue<DWORD, PDB_Lang>(Symbol, &IDiaSymbol::get_language);653}654655SymIndexId DIARawSymbol::getLexicalParentId() const {656return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_lexicalParentId);657}658659std::string DIARawSymbol::getLibraryName() const {660return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_libraryName);661}662663uint32_t DIARawSymbol::getLiveRangeStartAddressOffset() const {664return PrivateGetDIAValue(Symbol,665&IDiaSymbol::get_liveRangeStartAddressOffset);666}667668uint32_t DIARawSymbol::getLiveRangeStartAddressSection() const {669return PrivateGetDIAValue(Symbol,670&IDiaSymbol::get_liveRangeStartAddressSection);671}672673uint32_t DIARawSymbol::getLiveRangeStartRelativeVirtualAddress() const {674return PrivateGetDIAValue(675Symbol, &IDiaSymbol::get_liveRangeStartRelativeVirtualAddress);676}677678codeview::RegisterId DIARawSymbol::getLocalBasePointerRegisterId() const {679return PrivateGetDIAValue<DWORD, codeview::RegisterId>(680Symbol, &IDiaSymbol::get_localBasePointerRegisterId);681}682683SymIndexId DIARawSymbol::getLowerBoundId() const {684return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_lowerBoundId);685}686687uint32_t DIARawSymbol::getMemorySpaceKind() const {688return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_memorySpaceKind);689}690691std::string DIARawSymbol::getName() const {692return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_name);693}694695uint32_t DIARawSymbol::getNumberOfAcceleratorPointerTags() const {696return PrivateGetDIAValue(Symbol,697&IDiaSymbol::get_numberOfAcceleratorPointerTags);698}699700uint32_t DIARawSymbol::getNumberOfColumns() const {701return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfColumns);702}703704uint32_t DIARawSymbol::getNumberOfModifiers() const {705return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfModifiers);706}707708uint32_t DIARawSymbol::getNumberOfRegisterIndices() const {709return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfRegisterIndices);710}711712uint32_t DIARawSymbol::getNumberOfRows() const {713return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfRows);714}715716std::string DIARawSymbol::getObjectFileName() const {717return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_objectFileName);718}719720uint32_t DIARawSymbol::getOemId() const {721return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_oemId);722}723724SymIndexId DIARawSymbol::getOemSymbolId() const {725return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_oemSymbolId);726}727728uint32_t DIARawSymbol::getOffsetInUdt() const {729return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_offsetInUdt);730}731732PDB_Cpu DIARawSymbol::getPlatform() const {733return PrivateGetDIAValue<DWORD, PDB_Cpu>(Symbol, &IDiaSymbol::get_platform);734}735736uint32_t DIARawSymbol::getRank() const {737return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_rank);738}739740codeview::RegisterId DIARawSymbol::getRegisterId() const {741return PrivateGetDIAValue<DWORD, codeview::RegisterId>(742Symbol, &IDiaSymbol::get_registerId);743}744745uint32_t DIARawSymbol::getRegisterType() const {746return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_registerType);747}748749uint32_t DIARawSymbol::getRelativeVirtualAddress() const {750return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_relativeVirtualAddress);751}752753uint32_t DIARawSymbol::getSamplerSlot() const {754return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_samplerSlot);755}756757uint32_t DIARawSymbol::getSignature() const {758return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_signature);759}760761uint32_t DIARawSymbol::getSizeInUdt() const {762return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_sizeInUdt);763}764765uint32_t DIARawSymbol::getSlot() const {766return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_slot);767}768769std::string DIARawSymbol::getSourceFileName() const {770return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_sourceFileName);771}772773std::unique_ptr<IPDBLineNumber> DIARawSymbol::getSrcLineOnTypeDefn() const {774CComPtr<IDiaLineNumber> LineNumber;775if (FAILED(Symbol->getSrcLineOnTypeDefn(&LineNumber)) || !LineNumber)776return nullptr;777778return std::make_unique<DIALineNumber>(LineNumber);779}780781uint32_t DIARawSymbol::getStride() const {782return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_stride);783}784785SymIndexId DIARawSymbol::getSubTypeId() const {786return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_subTypeId);787}788789std::string DIARawSymbol::getSymbolsFileName() const {790return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_symbolsFileName);791}792793SymIndexId DIARawSymbol::getSymIndexId() const {794return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_symIndexId);795}796797uint32_t DIARawSymbol::getTargetOffset() const {798return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetOffset);799}800801uint32_t DIARawSymbol::getTargetRelativeVirtualAddress() const {802return PrivateGetDIAValue(Symbol,803&IDiaSymbol::get_targetRelativeVirtualAddress);804}805806uint64_t DIARawSymbol::getTargetVirtualAddress() const {807return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetVirtualAddress);808}809810uint32_t DIARawSymbol::getTargetSection() const {811return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetSection);812}813814uint32_t DIARawSymbol::getTextureSlot() const {815return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_textureSlot);816}817818uint32_t DIARawSymbol::getTimeStamp() const {819return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_timeStamp);820}821822uint32_t DIARawSymbol::getToken() const {823return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_token);824}825826SymIndexId DIARawSymbol::getTypeId() const {827return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_typeId);828}829830uint32_t DIARawSymbol::getUavSlot() const {831return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_uavSlot);832}833834std::string DIARawSymbol::getUndecoratedName() const {835return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_undecoratedName);836}837838SymIndexId DIARawSymbol::getUnmodifiedTypeId() const {839return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_unmodifiedTypeId);840}841842SymIndexId DIARawSymbol::getUpperBoundId() const {843return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_upperBoundId);844}845846Variant DIARawSymbol::getValue() const {847VARIANT Value;848Value.vt = VT_EMPTY;849if (S_OK != Symbol->get_value(&Value))850return Variant();851852return VariantFromVARIANT(Value);853}854855uint32_t DIARawSymbol::getVirtualBaseDispIndex() const {856return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseDispIndex);857}858859uint32_t DIARawSymbol::getVirtualBaseOffset() const {860return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseOffset);861}862863SymIndexId DIARawSymbol::getVirtualTableShapeId() const {864return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualTableShapeId);865}866867std::unique_ptr<PDBSymbolTypeBuiltin>868DIARawSymbol::getVirtualBaseTableType() const {869CComPtr<IDiaSymbol> TableType;870if (FAILED(Symbol->get_virtualBaseTableType(&TableType)) || !TableType)871return nullptr;872873auto RawVT = std::make_unique<DIARawSymbol>(Session, TableType);874auto Pointer =875PDBSymbol::createAs<PDBSymbolTypePointer>(Session, std::move(RawVT));876return unique_dyn_cast<PDBSymbolTypeBuiltin>(Pointer->getPointeeType());877}878879PDB_DataKind DIARawSymbol::getDataKind() const {880return PrivateGetDIAValue<DWORD, PDB_DataKind>(Symbol,881&IDiaSymbol::get_dataKind);882}883884PDB_SymType DIARawSymbol::getSymTag() const {885return PrivateGetDIAValue<DWORD, PDB_SymType>(Symbol,886&IDiaSymbol::get_symTag);887}888889codeview::GUID DIARawSymbol::getGuid() const {890return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_guid);891}892893int32_t DIARawSymbol::getOffset() const {894return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_offset);895}896897int32_t DIARawSymbol::getThisAdjust() const {898return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_thisAdjust);899}900901int32_t DIARawSymbol::getVirtualBasePointerOffset() const {902return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBasePointerOffset);903}904905PDB_LocType DIARawSymbol::getLocationType() const {906return PrivateGetDIAValue<DWORD, PDB_LocType>(Symbol,907&IDiaSymbol::get_locationType);908}909910PDB_Machine DIARawSymbol::getMachineType() const {911return PrivateGetDIAValue<DWORD, PDB_Machine>(Symbol,912&IDiaSymbol::get_machineType);913}914915codeview::ThunkOrdinal DIARawSymbol::getThunkOrdinal() const {916return PrivateGetDIAValue<DWORD, codeview::ThunkOrdinal>(917Symbol, &IDiaSymbol::get_thunkOrdinal);918}919920uint64_t DIARawSymbol::getLength() const {921return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_length);922}923924uint64_t DIARawSymbol::getLiveRangeLength() const {925return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_liveRangeLength);926}927928uint64_t DIARawSymbol::getVirtualAddress() const {929return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualAddress);930}931932PDB_UdtType DIARawSymbol::getUdtKind() const {933return PrivateGetDIAValue<DWORD, PDB_UdtType>(Symbol,934&IDiaSymbol::get_udtKind);935}936937bool DIARawSymbol::hasConstructor() const {938return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_constructor);939}940941bool DIARawSymbol::hasCustomCallingConvention() const {942return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_customCallingConvention);943}944945bool DIARawSymbol::hasFarReturn() const {946return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_farReturn);947}948949bool DIARawSymbol::isCode() const {950return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_code);951}952953bool DIARawSymbol::isCompilerGenerated() const {954return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_compilerGenerated);955}956957bool DIARawSymbol::isConstType() const {958return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_constType);959}960961bool DIARawSymbol::isEditAndContinueEnabled() const {962return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_editAndContinueEnabled);963}964965bool DIARawSymbol::isFunction() const {966return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_function);967}968969bool DIARawSymbol::getAddressTaken() const {970return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressTaken);971}972973bool DIARawSymbol::getNoStackOrdering() const {974return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noStackOrdering);975}976977bool DIARawSymbol::hasAlloca() const {978return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasAlloca);979}980981bool DIARawSymbol::hasAssignmentOperator() const {982return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasAssignmentOperator);983}984985bool DIARawSymbol::hasCTypes() const {986return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCTypes);987}988989bool DIARawSymbol::hasCastOperator() const {990return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasCastOperator);991}992993bool DIARawSymbol::hasDebugInfo() const {994return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasDebugInfo);995}996997bool DIARawSymbol::hasEH() const {998return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasEH);999}10001001bool DIARawSymbol::hasEHa() const {1002return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasEHa);1003}10041005bool DIARawSymbol::hasInlAsm() const {1006return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasInlAsm);1007}10081009bool DIARawSymbol::hasInlineAttribute() const {1010return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_inlSpec);1011}10121013bool DIARawSymbol::hasInterruptReturn() const {1014return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_interruptReturn);1015}10161017bool DIARawSymbol::hasFramePointer() const {1018return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_framePointerPresent);1019}10201021bool DIARawSymbol::hasLongJump() const {1022return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasLongJump);1023}10241025bool DIARawSymbol::hasManagedCode() const {1026return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasManagedCode);1027}10281029bool DIARawSymbol::hasNestedTypes() const {1030return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasNestedTypes);1031}10321033bool DIARawSymbol::hasNoInlineAttribute() const {1034return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noInline);1035}10361037bool DIARawSymbol::hasNoReturnAttribute() const {1038return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noReturn);1039}10401041bool DIARawSymbol::hasOptimizedCodeDebugInfo() const {1042return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_optimizedCodeDebugInfo);1043}10441045bool DIARawSymbol::hasOverloadedOperator() const {1046return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_overloadedOperator);1047}10481049bool DIARawSymbol::hasSEH() const {1050return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSEH);1051}10521053bool DIARawSymbol::hasSecurityChecks() const {1054return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSecurityChecks);1055}10561057bool DIARawSymbol::hasSetJump() const {1058return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSetJump);1059}10601061bool DIARawSymbol::hasStrictGSCheck() const {1062return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_strictGSCheck);1063}10641065bool DIARawSymbol::isAcceleratorGroupSharedLocal() const {1066return PrivateGetDIAValue(Symbol,1067&IDiaSymbol::get_isAcceleratorGroupSharedLocal);1068}10691070bool DIARawSymbol::isAcceleratorPointerTagLiveRange() const {1071return PrivateGetDIAValue(Symbol,1072&IDiaSymbol::get_isAcceleratorPointerTagLiveRange);1073}10741075bool DIARawSymbol::isAcceleratorStubFunction() const {1076return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isAcceleratorStubFunction);1077}10781079bool DIARawSymbol::isAggregated() const {1080return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isAggregated);1081}10821083bool DIARawSymbol::isIntroVirtualFunction() const {1084return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_intro);1085}10861087bool DIARawSymbol::isCVTCIL() const {1088return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCVTCIL);1089}10901091bool DIARawSymbol::isConstructorVirtualBase() const {1092return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isConstructorVirtualBase);1093}10941095bool DIARawSymbol::isCxxReturnUdt() const {1096return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCxxReturnUdt);1097}10981099bool DIARawSymbol::isDataAligned() const {1100return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isDataAligned);1101}11021103bool DIARawSymbol::isHLSLData() const {1104return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isHLSLData);1105}11061107bool DIARawSymbol::isHotpatchable() const {1108return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isHotpatchable);1109}11101111bool DIARawSymbol::isIndirectVirtualBaseClass() const {1112return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_indirectVirtualBaseClass);1113}11141115bool DIARawSymbol::isInterfaceUdt() const {1116return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isInterfaceUdt);1117}11181119bool DIARawSymbol::isIntrinsic() const {1120return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_intrinsic);1121}11221123bool DIARawSymbol::isLTCG() const {1124return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isLTCG);1125}11261127bool DIARawSymbol::isLocationControlFlowDependent() const {1128return PrivateGetDIAValue(Symbol,1129&IDiaSymbol::get_isLocationControlFlowDependent);1130}11311132bool DIARawSymbol::isMSILNetmodule() const {1133return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMSILNetmodule);1134}11351136bool DIARawSymbol::isMatrixRowMajor() const {1137return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMatrixRowMajor);1138}11391140bool DIARawSymbol::isManagedCode() const {1141return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_managed);1142}11431144bool DIARawSymbol::isMSILCode() const {1145return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_msil);1146}11471148bool DIARawSymbol::isMultipleInheritance() const {1149return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMultipleInheritance);1150}11511152bool DIARawSymbol::isNaked() const {1153return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isNaked);1154}11551156bool DIARawSymbol::isNested() const {1157return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_nested);1158}11591160bool DIARawSymbol::isOptimizedAway() const {1161return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isOptimizedAway);1162}11631164bool DIARawSymbol::isPacked() const {1165return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_packed);1166}11671168bool DIARawSymbol::isPointerBasedOnSymbolValue() const {1169return PrivateGetDIAValue(Symbol,1170&IDiaSymbol::get_isPointerBasedOnSymbolValue);1171}11721173bool DIARawSymbol::isPointerToDataMember() const {1174return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isPointerToDataMember);1175}11761177bool DIARawSymbol::isPointerToMemberFunction() const {1178return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isPointerToMemberFunction);1179}11801181bool DIARawSymbol::isPureVirtual() const {1182return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_pure);1183}11841185bool DIARawSymbol::isRValueReference() const {1186return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_RValueReference);1187}11881189bool DIARawSymbol::isRefUdt() const {1190return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isRefUdt);1191}11921193bool DIARawSymbol::isReference() const {1194return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_reference);1195}11961197bool DIARawSymbol::isRestrictedType() const {1198return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_restrictedType);1199}12001201bool DIARawSymbol::isReturnValue() const {1202return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isReturnValue);1203}12041205bool DIARawSymbol::isSafeBuffers() const {1206return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSafeBuffers);1207}12081209bool DIARawSymbol::isScoped() const {1210return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_scoped);1211}12121213bool DIARawSymbol::isSdl() const {1214return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSdl);1215}12161217bool DIARawSymbol::isSingleInheritance() const {1218return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSingleInheritance);1219}12201221bool DIARawSymbol::isSplitted() const {1222return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSplitted);1223}12241225bool DIARawSymbol::isStatic() const {1226return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isStatic);1227}12281229bool DIARawSymbol::hasPrivateSymbols() const {1230// hasPrivateSymbols is the opposite of isStripped, but we expose1231// hasPrivateSymbols as a more intuitive interface.1232return !PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isStripped);1233}12341235bool DIARawSymbol::isUnalignedType() const {1236return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_unalignedType);1237}12381239bool DIARawSymbol::isUnreached() const {1240return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_notReached);1241}12421243bool DIARawSymbol::isValueUdt() const {1244return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isValueUdt);1245}12461247bool DIARawSymbol::isVirtual() const {1248return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtual);1249}12501251bool DIARawSymbol::isVirtualBaseClass() const {1252return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseClass);1253}12541255bool DIARawSymbol::isVirtualInheritance() const {1256return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isVirtualInheritance);1257}12581259bool DIARawSymbol::isVolatileType() const {1260return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_volatileType);1261}12621263bool DIARawSymbol::wasInlined() const {1264return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_wasInlined);1265}12661267std::string DIARawSymbol::getUnused() const {1268return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_unused);1269}127012711272