LLDB  mainline
Classes | Macros | Typedefs | Functions
TypeSystemClang.cpp File Reference
#include "TypeSystemClang.h"
#include "llvm/Support/FormatAdapters.h"
#include "llvm/Support/FormatVariadic.h"
#include <mutex>
#include <string>
#include <vector>
#include "clang/AST/ASTContext.h"
#include "clang/AST/ASTImporter.h"
#include "clang/AST/Attr.h"
#include "clang/AST/CXXInheritance.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/Mangle.h"
#include "clang/AST/RecordLayout.h"
#include "clang/AST/Type.h"
#include "clang/AST/VTableBuilder.h"
#include "clang/Basic/Builtins.h"
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/FileManager.h"
#include "clang/Basic/FileSystemOptions.h"
#include "clang/Basic/LangStandard.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Basic/TargetOptions.h"
#include "clang/Frontend/FrontendOptions.h"
#include "clang/Lex/HeaderSearch.h"
#include "clang/Lex/HeaderSearchOptions.h"
#include "clang/Lex/ModuleMap.h"
#include "clang/Sema/Sema.h"
#include "llvm/Support/Signals.h"
#include "llvm/Support/Threading.h"
#include "Plugins/ExpressionParser/Clang/ClangASTImporter.h"
#include "Plugins/ExpressionParser/Clang/ClangASTMetadata.h"
#include "Plugins/ExpressionParser/Clang/ClangExternalASTSourceCallbacks.h"
#include "Plugins/ExpressionParser/Clang/ClangFunctionCaller.h"
#include "Plugins/ExpressionParser/Clang/ClangPersistentVariables.h"
#include "Plugins/ExpressionParser/Clang/ClangUserExpression.h"
#include "Plugins/ExpressionParser/Clang/ClangUtil.h"
#include "Plugins/ExpressionParser/Clang/ClangUtilityFunction.h"
#include "lldb/Utility/ArchSpec.h"
#include "lldb/Utility/Flags.h"
#include "lldb/Core/DumpDataExtractor.h"
#include "lldb/Core/Module.h"
#include "lldb/Core/PluginManager.h"
#include "lldb/Core/StreamFile.h"
#include "lldb/Core/ThreadSafeDenseMap.h"
#include "lldb/Core/UniqueCStringMap.h"
#include "lldb/Symbol/ObjectFile.h"
#include "lldb/Symbol/SymbolFile.h"
#include "lldb/Target/ExecutionContext.h"
#include "lldb/Target/Language.h"
#include "lldb/Target/Process.h"
#include "lldb/Target/Target.h"
#include "lldb/Utility/DataExtractor.h"
#include "lldb/Utility/LLDBAssert.h"
#include "lldb/Utility/Log.h"
#include "lldb/Utility/RegularExpression.h"
#include "lldb/Utility/Scalar.h"
#include "Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h"
#include "Plugins/SymbolFile/DWARF/DWARFASTParserClang.h"
#include "Plugins/SymbolFile/PDB/PDBASTParser.h"
#include <stdio.h>
#include "clang/Basic/OperatorKinds.def"

Go to the source code of this file.

Classes

class  NullDiagnosticConsumer
 

Macros

#define OVERLOADED_OPERATOR(Name, Spelling, Token, Unary, Binary, MemberOnly)
 
#define DEPTH_INCREMENT   2
 

Typedefs

typedef lldb_private::ThreadSafeDenseMap< clang::ASTContext *, TypeSystemClang * > ClangASTMap
 

Functions

static lldb::addr_t GetVTableAddress (Process &process, VTableContextBase &vtable_ctx, ValueObject &valobj, const ASTRecordLayout &record_layout)
 
static int64_t ReadVBaseOffsetFromVTable (Process &process, VTableContextBase &vtable_ctx, lldb::addr_t vtable_ptr, const CXXRecordDecl *cxx_record_decl, const CXXRecordDecl *base_class_decl)
 
static bool GetVBaseBitOffset (VTableContextBase &vtable_ctx, ValueObject &valobj, const ASTRecordLayout &record_layout, const CXXRecordDecl *cxx_record_decl, const CXXRecordDecl *base_class_decl, int32_t &bit_offset)
 
static ClangASTMapGetASTMap ()
 
static void SetMemberOwningModule (clang::Decl *member, const clang::Decl *parent)
 
static void ParseLangArgs (LangOptions &Opts, InputKind IK, const char *triple)
 
static bool QualTypeMatchesBitSize (const uint64_t bit_size, ASTContext &ast, QualType qual_type)
 
static TemplateParameterList * CreateTemplateParameterList (ASTContext &ast, const TypeSystemClang::TemplateParameterInfos &template_param_infos, llvm::SmallVector< NamedDecl *, 8 > &template_param_decls)
 
static bool check_op_param (bool is_method, clang::OverloadedOperatorKind op_kind, bool unary, bool binary, uint32_t num_params)
 
static bool BaseSpecifierIsEmpty (const CXXBaseSpecifier *b)
 
clang::DeclContext * FindLCABetweenDecls (clang::DeclContext *left, clang::DeclContext *right, clang::DeclContext *root)
 
static QualType RemoveWrappingTypes (QualType type, ArrayRef< clang::Type::TypeClass > mask={})
 Aggressively desugar the provided type, skipping past various kinds of syntactic sugar and other constructs one typically wants to ignore. More...
 
static bool GetCompleteQualType (clang::ASTContext *ast, clang::QualType qual_type, bool allow_completion=true)
 
static clang::ObjCIvarDecl::AccessControl ConvertAccessTypeToObjCIvarAccessControl (AccessType access)
 
static clang::QualType GetFullyUnqualifiedType_Impl (clang::ASTContext *ast, clang::QualType qual_type)
 
static bool ObjCDeclHasIVars (clang::ObjCInterfaceDecl *class_interface_decl, bool check_superclass)
 
static Optional< SymbolFile::ArrayInfoGetDynamicArrayInfo (TypeSystemClang &ast, SymbolFile *sym_file, clang::QualType qual_type, const ExecutionContext *exe_ctx)
 
static lldb::opaque_compiler_type_t GetObjCFieldAtIndex (clang::ASTContext *ast, clang::ObjCInterfaceDecl *class_interface_decl, size_t idx, std::string &name, uint64_t *bit_offset_ptr, uint32_t *bitfield_bit_size_ptr, bool *is_bitfield_ptr)
 
static uint32_t GetIndexForRecordBase (const clang::RecordDecl *record_decl, const clang::CXXBaseSpecifier *base_spec, bool omit_empty_base_classes)
 
static uint32_t GetIndexForRecordChild (const clang::RecordDecl *record_decl, clang::NamedDecl *canonical_decl, bool omit_empty_base_classes)
 
static bool DumpEnumValue (const clang::QualType &qual_type, Stream *s, const DataExtractor &data, lldb::offset_t byte_offset, size_t byte_size, uint32_t bitfield_bit_offset, uint32_t bitfield_bit_size)
 
static bool IsClangDeclContext (const CompilerDeclContext &dc)
 

Macro Definition Documentation

◆ DEPTH_INCREMENT

#define DEPTH_INCREMENT   2

Definition at line 8195 of file TypeSystemClang.cpp.

Referenced by lldb_private::TypeSystemClang::DumpValue().

◆ OVERLOADED_OPERATOR

#define OVERLOADED_OPERATOR (   Name,
  Spelling,
  Token,
  Unary,
  Binary,
  MemberOnly 
)
Value:
case OO_##Name: \
return check_op_param(is_method, op_kind, Unary, Binary, num_params);
static bool check_op_param(bool is_method, clang::OverloadedOperatorKind op_kind, bool unary, bool binary, uint32_t num_params)

Typedef Documentation

◆ ClangASTMap

Definition at line 311 of file TypeSystemClang.cpp.

Function Documentation

◆ BaseSpecifierIsEmpty()

static bool BaseSpecifierIsEmpty ( const CXXBaseSpecifier *  b)
inlinestatic

◆ check_op_param()

static bool check_op_param ( bool  is_method,
clang::OverloadedOperatorKind  op_kind,
bool  unary,
bool  binary,
uint32_t  num_params 
)
inlinestatic

Definition at line 1593 of file TypeSystemClang.cpp.

◆ ConvertAccessTypeToObjCIvarAccessControl()

static clang::ObjCIvarDecl::AccessControl ConvertAccessTypeToObjCIvarAccessControl ( AccessType  access)
static

◆ CreateTemplateParameterList()

static TemplateParameterList* CreateTemplateParameterList ( ASTContext &  ast,
const TypeSystemClang::TemplateParameterInfos template_param_infos,
llvm::SmallVector< NamedDecl *, 8 > &  template_param_decls 
)
static

◆ DumpEnumValue()

static bool DumpEnumValue ( const clang::QualType &  qual_type,
Stream s,
const DataExtractor data,
lldb::offset_t  byte_offset,
size_t  byte_size,
uint32_t  bitfield_bit_offset,
uint32_t  bitfield_bit_size 
)
static

◆ FindLCABetweenDecls()

clang::DeclContext* FindLCABetweenDecls ( clang::DeclContext *  left,
clang::DeclContext *  right,
clang::DeclContext *  root 
)

◆ GetASTMap()

static ClangASTMap& GetASTMap ( )
static

◆ GetCompleteQualType()

static bool GetCompleteQualType ( clang::ASTContext *  ast,
clang::QualType  qual_type,
bool  allow_completion = true 
)
static

◆ GetDynamicArrayInfo()

static Optional<SymbolFile::ArrayInfo> GetDynamicArrayInfo ( TypeSystemClang ast,
SymbolFile sym_file,
clang::QualType  qual_type,
const ExecutionContext exe_ctx 
)
static

◆ GetFullyUnqualifiedType_Impl()

static clang::QualType GetFullyUnqualifiedType_Impl ( clang::ASTContext *  ast,
clang::QualType  qual_type 
)
static

◆ GetIndexForRecordBase()

static uint32_t GetIndexForRecordBase ( const clang::RecordDecl *  record_decl,
const clang::CXXBaseSpecifier *  base_spec,
bool  omit_empty_base_classes 
)
static

◆ GetIndexForRecordChild()

static uint32_t GetIndexForRecordChild ( const clang::RecordDecl *  record_decl,
clang::NamedDecl *  canonical_decl,
bool  omit_empty_base_classes 
)
static

◆ GetObjCFieldAtIndex()

static lldb::opaque_compiler_type_t GetObjCFieldAtIndex ( clang::ASTContext *  ast,
clang::ObjCInterfaceDecl *  class_interface_decl,
size_t  idx,
std::string &  name,
uint64_t *  bit_offset_ptr,
uint32_t bitfield_bit_size_ptr,
bool *  is_bitfield_ptr 
)
static

◆ GetVBaseBitOffset()

static bool GetVBaseBitOffset ( VTableContextBase &  vtable_ctx,
ValueObject valobj,
const ASTRecordLayout &  record_layout,
const CXXRecordDecl *  cxx_record_decl,
const CXXRecordDecl *  base_class_decl,
int32_t &  bit_offset 
)
static

◆ GetVTableAddress()

static lldb::addr_t GetVTableAddress ( Process process,
VTableContextBase &  vtable_ctx,
ValueObject valobj,
const ASTRecordLayout &  record_layout 
)
static

◆ IsClangDeclContext()

static bool IsClangDeclContext ( const CompilerDeclContext dc)
static

◆ ObjCDeclHasIVars()

static bool ObjCDeclHasIVars ( clang::ObjCInterfaceDecl *  class_interface_decl,
bool  check_superclass 
)
static

◆ ParseLangArgs()

static void ParseLangArgs ( LangOptions &  Opts,
InputKind  IK,
const char *  triple 
)
static

◆ QualTypeMatchesBitSize()

static bool QualTypeMatchesBitSize ( const uint64_t  bit_size,
ASTContext &  ast,
QualType  qual_type 
)
inlinestatic

◆ ReadVBaseOffsetFromVTable()

static int64_t ReadVBaseOffsetFromVTable ( Process process,
VTableContextBase &  vtable_ctx,
lldb::addr_t  vtable_ptr,
const CXXRecordDecl *  cxx_record_decl,
const CXXRecordDecl *  base_class_decl 
)
static

◆ RemoveWrappingTypes()

static QualType RemoveWrappingTypes ( QualType  type,
ArrayRef< clang::Type::TypeClass >  mask = {} 
)
static

Aggressively desugar the provided type, skipping past various kinds of syntactic sugar and other constructs one typically wants to ignore.

The mask argument allows one to skip certain kinds of simplifications, when one wishes to handle a certain kind of type directly.

Definition at line 2488 of file TypeSystemClang.cpp.

Referenced by lldb_private::TypeSystemClang::DumpTypeDescription(), lldb_private::TypeSystemClang::GetAsTemplateSpecialization(), lldb_private::TypeSystemClang::GetChildCompilerTypeAtIndex(), GetCompleteQualType(), lldb_private::TypeSystemClang::GetDeclContextForType(), lldb_private::TypeSystemClang::GetDirectBaseClassAtIndex(), lldb_private::TypeSystemClang::GetEncoding(), lldb_private::TypeSystemClang::GetFieldAtIndex(), lldb_private::TypeSystemClang::GetFormat(), lldb_private::TypeSystemClang::GetIndexOfChildMemberWithName(), lldb_private::TypeSystemClang::GetIndexOfChildWithName(), lldb_private::TypeSystemClang::GetMemberFunctionAtIndex(), lldb_private::TypeSystemClang::GetNumChildren(), lldb_private::TypeSystemClang::GetNumDirectBaseClasses(), lldb_private::TypeSystemClang::GetNumFields(), lldb_private::TypeSystemClang::GetNumMemberFunctions(), lldb_private::TypeSystemClang::GetNumPointeeChildren(), lldb_private::TypeSystemClang::GetNumTemplateArguments(), lldb_private::TypeSystemClang::GetNumVirtualBaseClasses(), lldb_private::TypeSystemClang::GetTypeClass(), lldb_private::TypeSystemClang::GetTypedefedType(), lldb_private::TypeSystemClang::GetTypeInfo(), lldb_private::TypeSystemClang::GetVirtualBaseClassAtIndex(), lldb_private::TypeSystemClang::IsAggregateType(), lldb_private::TypeSystemClang::IsAnonymousType(), lldb_private::TypeSystemClang::IsArrayType(), lldb_private::TypeSystemClang::IsBlockPointerType(), lldb_private::TypeSystemClang::IsFunctionPointerType(), lldb_private::TypeSystemClang::IsFunctionType(), lldb_private::TypeSystemClang::IsHomogeneousAggregate(), lldb_private::TypeSystemClang::IsPointerOrReferenceType(), lldb_private::TypeSystemClang::IsPointerType(), lldb_private::TypeSystemClang::IsPossibleDynamicType(), lldb_private::TypeSystemClang::IsReferenceType(), lldb_private::TypeSystemClang::IsTypedefType(), and lldb_private::TypeSystemClang::SetHasExternalStorage().

◆ SetMemberOwningModule()

static void SetMemberOwningModule ( clang::Decl *  member,
const clang::Decl *  parent 
)
static