Author: Raphael Isemann Date: 2020-01-31T13:20:02+01:00 New Revision: 09217b60fcf1301e0333a69c37c6408d81c46ca5
URL: https://github.com/llvm/llvm-project/commit/09217b60fcf1301e0333a69c37c6408d81c46ca5 DIFF: https://github.com/llvm/llvm-project/commit/09217b60fcf1301e0333a69c37c6408d81c46ca5.diff LOG: [lldb][NFC] Add a CompilerDecl->clang::Decl conversion function to ClangUtil This automatically does the type checking for the cast. Added: Modified: lldb/include/lldb/Symbol/ClangUtil.h lldb/source/Plugins/ExpressionParser/Clang/ClangDeclVendor.cpp lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp lldb/source/Symbol/ClangUtil.cpp Removed: ################################################################################ diff --git a/lldb/include/lldb/Symbol/ClangUtil.h b/lldb/include/lldb/Symbol/ClangUtil.h index 5ffbce340e59..31e86cae5c3e 100644 --- a/lldb/include/lldb/Symbol/ClangUtil.h +++ b/lldb/include/lldb/Symbol/ClangUtil.h @@ -24,6 +24,10 @@ namespace lldb_private { struct ClangUtil { static bool IsClangType(const CompilerType &ct); + /// Returns the clang::Decl of the given CompilerDecl. + /// CompilerDecl has to be valid and represent a clang::Decl. + static clang::Decl *GetDecl(const CompilerDecl &decl); + static clang::QualType GetQualType(const CompilerType &ct); static clang::QualType GetCanonicalQualType(const CompilerType &ct); diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangDeclVendor.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangDeclVendor.cpp index 54865ae3ea13..f5b0c216902a 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangDeclVendor.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangDeclVendor.cpp @@ -8,6 +8,7 @@ #include "Plugins/ExpressionParser/Clang/ClangDeclVendor.h" +#include "lldb/Symbol/ClangUtil.h" #include "lldb/Symbol/TypeSystemClang.h" #include "lldb/Utility/ConstString.h" @@ -22,7 +23,7 @@ uint32_t ClangDeclVendor::FindDecls(ConstString name, bool append, std::vector<CompilerDecl> compiler_decls; uint32_t ret = FindDecls(name, /*append*/ false, max_matches, compiler_decls); for (CompilerDecl compiler_decl : compiler_decls) { - clang::Decl *d = static_cast<clang::Decl *>(compiler_decl.GetOpaqueDecl()); + clang::Decl *d = ClangUtil::GetDecl(compiler_decl); clang::NamedDecl *nd = llvm::cast<clang::NamedDecl>(d); decls.push_back(nd); } diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp index 806f7b60bfff..aa9fff3e4acb 100644 --- a/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp +++ b/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp @@ -1347,7 +1347,7 @@ PdbAstBuilder::ToCompilerDeclContext(clang::DeclContext &context) { } clang::Decl * PdbAstBuilder::FromCompilerDecl(CompilerDecl decl) { - return static_cast<clang::Decl *>(decl.GetOpaqueDecl()); + return ClangUtil::GetDecl(decl); } clang::DeclContext * diff --git a/lldb/source/Symbol/ClangUtil.cpp b/lldb/source/Symbol/ClangUtil.cpp index 74d95bac4a97..2f3307ee1a5d 100644 --- a/lldb/source/Symbol/ClangUtil.cpp +++ b/lldb/source/Symbol/ClangUtil.cpp @@ -28,6 +28,11 @@ bool ClangUtil::IsClangType(const CompilerType &ct) { return true; } +clang::Decl *ClangUtil::GetDecl(const CompilerDecl &decl) { + assert(llvm::isa<TypeSystemClang>(decl.GetTypeSystem())); + return static_cast<clang::Decl *>(decl.GetOpaqueDecl()); +} + QualType ClangUtil::GetQualType(const CompilerType &ct) { // Make sure we have a clang type before making a clang::QualType if (!IsClangType(ct)) _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits