clang
9.0.0
|
#include "clang/AST/Mangle.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/Attr.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/DeclOpenMP.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/ExprObjC.h"
#include "clang/AST/TypeLoc.h"
#include "clang/Basic/ABI.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/TargetInfo.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include "clang/AST/TypeNodes.def"
#include "clang/AST/BuiltinTypes.def"
#include "clang/Basic/OpenCLImageTypes.def"
#include "clang/Basic/OpenCLExtensionTypes.def"
#include "clang/AST/StmtNodes.inc"
Go to the source code of this file.
Macros | |
#define | ABSTRACT_TYPE(CLASS, PARENT) |
#define | NON_CANONICAL_TYPE(CLASS, PARENT) |
#define | TYPE(CLASS, PARENT) void mangleType(const CLASS##Type *T); |
#define | ABSTRACT_TYPE(CLASS, PARENT) |
#define | NON_CANONICAL_TYPE(CLASS, PARENT) |
#define | TYPE(CLASS, PARENT) |
#define | BUILTIN_TYPE(Id, SingletonId) |
#define | PLACEHOLDER_TYPE(Id, SingletonId) case BuiltinType::Id: |
#define | IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) |
#define | EXT_OPAQUE_TYPE(ExtType, Id, Ext) |
#define | ABSTRACT_STMT(Type) |
#define | EXPR(Type, Base) |
#define | STMT(Type, Base) case Expr::Type##Class: |
Functions | |
static const DeclContext * | IgnoreLinkageSpecDecls (const DeclContext *DC) |
static bool | isStd (const NamespaceDecl *NS) |
Return whether a given namespace is the 'std' namespace. More... | |
static bool | isStdNamespace (const DeclContext *DC) |
static const TemplateDecl * | isTemplate (const NamedDecl *ND, const TemplateArgumentList *&TemplateArgs) |
static bool | isTypeSubstitutable (Qualifiers Quals, const Type *Ty, ASTContext &Ctx) |
static StringRef | mangleAArch64VectorBase (const BuiltinType *EltType) |
static bool | isParenthesizedADLCallee (const CallExpr *call) |
Look at the callee of the given call expression and determine if it's a parenthesized id-expression which would have triggered ADL otherwise. More... | |
static bool | hasMangledSubstitutionQualifiers (QualType T) |
Determine whether the given type has any qualifiers that are relevant for substitutions. More... | |
static bool | isCharType (QualType T) |
static bool | isCharSpecialization (QualType T, const char *Name) |
Returns whether a given type is a template specialization of a given name with a single argument of type char. More... | |
template<std::size_t StrLen> | |
static bool | isStreamCharSpecialization (const ClassTemplateSpecializationDecl *SD, const char(&Str)[StrLen]) |
#define ABSTRACT_STMT | ( | Type | ) |
#define ABSTRACT_TYPE | ( | CLASS, | |
PARENT | |||
) |
Definition at line 513 of file ItaniumMangle.cpp.
#define ABSTRACT_TYPE | ( | CLASS, | |
PARENT | |||
) |
Definition at line 513 of file ItaniumMangle.cpp.
#define BUILTIN_TYPE | ( | Id, | |
SingletonId | |||
) |
#define EXT_OPAQUE_TYPE | ( | ExtType, | |
Id, | |||
Ext | |||
) |
#define IMAGE_TYPE | ( | ImgType, | |
Id, | |||
SingletonId, | |||
Access, | |||
Suffix | |||
) |
#define NON_CANONICAL_TYPE | ( | CLASS, | |
PARENT | |||
) |
Definition at line 514 of file ItaniumMangle.cpp.
#define NON_CANONICAL_TYPE | ( | CLASS, | |
PARENT | |||
) |
Definition at line 514 of file ItaniumMangle.cpp.
#define PLACEHOLDER_TYPE | ( | Id, | |
SingletonId | |||
) | case BuiltinType::Id: |
#define STMT | ( | Type, | |
Base | |||
) | case Expr::Type##Class: |
#define TYPE | ( | CLASS, | |
PARENT | |||
) | void mangleType(const CLASS##Type *T); |
Definition at line 515 of file ItaniumMangle.cpp.
#define TYPE | ( | CLASS, | |
PARENT | |||
) |
Definition at line 515 of file ItaniumMangle.cpp.
Determine whether the given type has any qualifiers that are relevant for substitutions.
Definition at line 4600 of file ItaniumMangle.cpp.
References clang::Type::getAs(), clang::QualType::getAsOpaquePtr(), clang::TemplateName::getAsTemplateDecl(), clang::TemplateName::getAsVoidPointer(), clang::Qualifiers::getCVRQualifiers(), clang::QualType::getQualifiers(), clang::Qualifiers::hasAddressSpace(), and clang::Qualifiers::hasUnaligned().
Referenced by isStreamCharSpecialization().
|
static |
Definition at line 759 of file ItaniumMangle.cpp.
Referenced by isStd(), and isTemplate().
Returns whether a given type is a template specialization of a given name with a single argument of type char.
Definition at line 4647 of file ItaniumMangle.cpp.
References clang::Type::getAs(), clang::RecordType::getDecl(), clang::NamedDecl::getIdentifier(), clang::IdentifierInfo::getName(), clang::ClassTemplateSpecializationDecl::getTemplateArgs(), isCharType(), clang::QualType::isNull(), isStdNamespace(), and clang::TemplateArgumentList::size().
Referenced by isStreamCharSpecialization().
Definition at line 4637 of file ItaniumMangle.cpp.
References clang::QualType::isNull(), and clang::Type::isSpecificBuiltinType().
Referenced by clang::CanProxyBase< ObjCObjectType >::getAs(), isCharSpecialization(), clang::Type::isObjectType(), and isStreamCharSpecialization().
Look at the callee of the given call expression and determine if it's a parenthesized id-expression which would have triggered ADL otherwise.
Definition at line 3466 of file ItaniumMangle.cpp.
References clang::CXXUnresolvedConstructExpr::arg_size(), clang::CallExpr::arguments(), clang::OverloadExpr::decls_begin(), clang::DiagnosticsEngine::Error, clang::CXXNewExpr::getAllocatedType(), clang::CXXUnresolvedConstructExpr::getArg(), clang::MemberExpr::getBase(), clang::CXXDependentScopeMemberExpr::getBase(), clang::UnresolvedMemberExpr::getBase(), clang::CallExpr::getCallee(), clang::DiagnosticsEngine::getCustomDiagID(), clang::NamedDecl::getDeclName(), clang::Expr::getExprLoc(), clang::CXXUuidofExpr::getExprOperand(), clang::CXXDependentScopeMemberExpr::getFirstQualifierFoundInScope(), clang::TemplateParmPosition::getIndex(), clang::InitListExpr::getInit(), clang::CXXNewExpr::getInitializationStyle(), clang::CXXNewExpr::getInitializer(), clang::EnumConstantDecl::getInitVal(), clang::Decl::getKind(), clang::CXXDependentScopeMemberExpr::getMember(), clang::MemberExpr::getMemberDecl(), clang::UnresolvedMemberExpr::getMemberName(), clang::OverloadExpr::getName(), clang::CallExpr::getNumArgs(), clang::OverloadExpr::getNumDecls(), clang::InitListExpr::getNumInits(), clang::OverloadExpr::getNumTemplateArgs(), clang::MemberExpr::getNumTemplateArgs(), clang::CXXDependentScopeMemberExpr::getNumTemplateArgs(), clang::OverloadExpr::getQualifier(), clang::MemberExpr::getQualifier(), clang::CXXDependentScopeMemberExpr::getQualifier(), clang::Stmt::getSourceRange(), clang::Stmt::getStmtClass(), clang::Stmt::getStmtClassName(), clang::CastExpr::getSubExpr(), clang::InitListExpr::getSyntacticForm(), clang::OverloadExpr::getTemplateArgs(), clang::MemberExpr::getTemplateArgs(), clang::CXXDependentScopeMemberExpr::getTemplateArgs(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::CXXUuidofExpr::getTypeOperand(), clang::CXXNewExpr::hasInitializer(), i, clang::Expr::IgnoreParens(), clang::CXXNewExpr::isArray(), clang::Designator::isArrayDesignator(), clang::Designator::isArrayRangeDesignator(), clang::MemberExpr::isArrow(), clang::CXXDependentScopeMemberExpr::isArrow(), clang::UnresolvedMemberExpr::isArrow(), clang::Designator::isFieldDesignator(), clang::CXXNewExpr::isGlobalNew(), clang::CXXDependentScopeMemberExpr::isImplicitAccess(), clang::UnresolvedMemberExpr::isImplicitAccess(), clang::CXXUnresolvedConstructExpr::isListInitialization(), clang::CXXUuidofExpr::isTypeOperand(), clang::CXXNewExpr::ListInit, clang::Stmt::NoStmtClass, clang::CXXNewExpr::placement_arg_begin(), clang::CXXNewExpr::placement_arg_end(), clang::DiagnosticsEngine::Report(), and clang::UnresolvedLookupExpr::requiresADL().
|
static |
Return whether a given namespace is the 'std' namespace.
Definition at line 768 of file ItaniumMangle.cpp.
References clang::NamedDecl::getIdentifier(), clang::NamespaceDecl::getOriginalNamespace(), IgnoreLinkageSpecDecls(), and clang::IdentifierInfo::isStr().
Referenced by isStdNamespace(), and isStreamCharSpecialization().
|
static |
Definition at line 779 of file ItaniumMangle.cpp.
References clang::DeclContext::isNamespace(), and isStd().
Referenced by isCharSpecialization(), clang::DeclContext::isNamespace(), isStreamCharSpecialization(), and isTemplate().
|
static |
Definition at line 4674 of file ItaniumMangle.cpp.
References clang::Ctor_Comdat, clang::Dtor_Comdat, clang::Type::getAs(), clang::QualType::getAsOpaquePtr(), clang::TemplateName::getAsTemplateDecl(), clang::TemplateName::getAsVoidPointer(), clang::NamedDecl::getIdentifier(), clang::NamedDecl::getName(), clang::FunctionType::getReturnType(), clang::ClassTemplateSpecializationDecl::getTemplateArgs(), clang::ValueDecl::getType(), hasMangledSubstitutionQualifiers(), clang::QualType::hasQualifiers(), isCharSpecialization(), isCharType(), clang::ReturnAdjustment::isEmpty(), isStd(), isStdNamespace(), clang::IdentifierInfo::isStr(), clang::ReturnAdjustment::VirtualAdjustment::Itanium, clang::ThisAdjustment::VirtualAdjustment::Itanium, clang::ReturnAdjustment::NonVirtual, clang::ThisAdjustment::NonVirtual, Offset, clang::ThunkInfo::Return, clang::TemplateArgumentList::size(), clang::ThunkInfo::This, clang::ReturnAdjustment::VirtualAdjustment::VBaseOffsetOffset, clang::ThisAdjustment::VirtualAdjustment::VCallOffsetOffset, clang::ReturnAdjustment::Virtual, and clang::ThisAdjustment::Virtual.
|
static |
Definition at line 787 of file ItaniumMangle.cpp.
References clang::Decl::getOwningModuleForLinkage(), clang::FunctionDecl::getPrimaryTemplate(), clang::FunctionDecl::getTemplateSpecializationArgs(), clang::NamedDecl::hasExternalFormalLinkage(), clang::NamedDecl::hasLinkage(), IgnoreLinkageSpecDecls(), clang::DeclContext::isNamespace(), isStdNamespace(), clang::DeclContext::isTranslationUnit(), and clang::Module::Name.
|
static |
Definition at line 2353 of file ItaniumMangle.cpp.
References clang::CC_AAPCS, clang::CC_AAPCS_VFP, clang::CC_AArch64VectorCall, clang::CC_C, clang::CC_IntelOclBicc, clang::CC_OpenCLKernel, clang::CC_PreserveAll, clang::CC_PreserveMost, clang::CC_SpirFunction, clang::CC_Swift, clang::CC_Win64, clang::CC_X86_64SysV, clang::CC_X86FastCall, clang::CC_X86Pascal, clang::CC_X86RegCall, clang::CC_X86StdCall, clang::CC_X86ThisCall, clang::CC_X86VectorCall, clang::DiagnosticsEngine::Error, clang::EST_Dynamic, clang::FunctionProtoType::exceptions(), clang::Decl::getAttr(), clang::DependentVectorType::getAttributeLoc(), clang::QualType::getCanonicalType(), clang::FunctionType::ExtInfo::getCC(), clang::MemberPointerType::getClass(), clang::DiagnosticsEngine::getCustomDiagID(), clang::UnresolvedUsingType::getDecl(), clang::TagType::getDecl(), clang::ComplexType::getElementType(), clang::ArrayType::getElementType(), clang::VectorType::getElementType(), clang::FunctionProtoType::getExceptionSpecType(), clang::FunctionType::getExtInfo(), clang::FunctionProtoType::getExtParameterInfo(), clang::TargetInfo::getFloat128Mangling(), clang::TemplateTypeParmType::getIndex(), getKind(), clang::BuiltinType::getKind(), clang::ASTContext::getLangOpts(), clang::TargetInfo::getLongDoubleMangling(), clang::FunctionProtoType::getMethodQuals(), clang::FunctionProtoType::getNoexceptExpr(), clang::VectorType::getNumElements(), clang::FunctionDecl::getNumParams(), clang::FunctionProtoType::getNumParams(), clang::QualType::getObjCLifetime(), clang::FunctionDecl::getParamDecl(), clang::getParameterABISpelling(), clang::FunctionProtoType::getParamType(), clang::PointerType::getPointeeType(), clang::ReferenceType::getPointeeType(), clang::MemberPointerType::getPointeeType(), clang::DependentAddressSpaceType::getPointeeType(), clang::ObjCObjectPointerType::getPointeeType(), clang::FunctionType::ExtInfo::getProducesResult(), clang::FunctionProtoType::getRefQualifier(), clang::FunctionType::getReturnType(), clang::QualType::getSingleStepDesugaredType(), clang::ConstantArrayType::getSize(), clang::VariableArrayType::getSizeExpr(), clang::DependentSizedArrayType::getSizeExpr(), clang::Type::getTypeClass(), clang::VectorType::getVectorKind(), clang::FunctionProtoType::hasExtParameterInfos(), clang::FunctionProtoType::hasInstantiationDependentExceptionSpec(), clang::Type::isBuiltinType(), clang::isComputedNoexcept(), clang::Type::isDependentAddressSpaceType(), clang::Type::isDependentType(), clang::Type::isInstantiationDependentType(), clang::FunctionProtoType::isNothrow(), clang::Type::isOpenCLSpecificType(), clang::Type::isSpecificBuiltinType(), clang::FunctionProtoType::isVariadic(), clang::VectorType::NeonPolyVector, clang::Ordinary, clang::SplitQualType::Quals, clang::Qualifiers::removeObjCLifetime(), clang::DiagnosticsEngine::Report(), clang::QualType::split(), clang::SwiftContext, clang::SwiftErrorResult, clang::SwiftIndirectResult, clang::SplitQualType::Ty, and clang::LangOptions::Ver6.
|
static |
Definition at line 3058 of file ItaniumMangle.cpp.
References clang::VectorType::AltiVecBool, clang::VectorType::AltiVecPixel, clang::UnaryTransformType::EnumUnderlyingType, clang::DiagnosticsEngine::Error, clang::ETK_Class, clang::ETK_Enum, clang::ETK_Interface, clang::ETK_None, clang::ETK_Struct, clang::ETK_Typename, clang::ETK_Union, clang::TemplateSpecializationType::getArgs(), clang::DependentTemplateSpecializationType::getArgs(), clang::Type::getAs(), clang::TemplateName::getAsTemplateDecl(), clang::DependentVectorType::getAttributeLoc(), clang::UnaryTransformType::getBaseType(), clang::ObjCObjectType::getBaseType(), clang::DiagnosticsEngine::getCustomDiagID(), clang::ObjCInterfaceType::getDecl(), clang::DeducedType::getDeducedType(), clang::DependentSizedExtVectorType::getElementType(), clang::VectorType::getElementType(), clang::DependentVectorType::getElementType(), clang::NamedDecl::getIdentifier(), clang::DependentNameType::getIdentifier(), clang::DependentTemplateSpecializationType::getIdentifier(), clang::InjectedClassNameType::getInjectedSpecializationType(), clang::AutoType::getKeyword(), clang::TypeWithKeyword::getKeyword(), clang::BuiltinType::getKind(), clang::TemplateSpecializationType::getNumArgs(), clang::DependentTemplateSpecializationType::getNumArgs(), clang::VectorType::getNumElements(), clang::PackExpansionType::getPattern(), clang::BlockPointerType::getPointeeType(), clang::DependentAddressSpaceType::getPointeeType(), clang::DependentNameType::getQualifier(), clang::DependentTemplateSpecializationType::getQualifier(), clang::DependentSizedExtVectorType::getSizeExpr(), clang::DependentVectorType::getSizeExpr(), clang::DeducedTemplateSpecializationType::getTemplateName(), clang::TemplateSpecializationType::getTemplateName(), clang::Expr::getType(), clang::ObjCObjectType::getTypeArgs(), clang::DecltypeType::getUnderlyingExpr(), clang::UnaryTransformType::getUTTKind(), clang::AtomicType::getValueType(), clang::VectorType::getVectorKind(), clang::DependentVectorType::getVectorKind(), clang::GNUAutoType, clang::Type::isBooleanType(), clang::Type::isBuiltinType(), clang::AutoType::isDecltypeAuto(), clang::Type::isDependentType(), clang::ObjCObjectType::isKindOfType(), clang::QualType::isNull(), clang::ObjCObjectType::isSpecialized(), clang::tooling::name(), clang::VectorType::NeonPolyVector, clang::VectorType::NeonVector, clang::ObjCProtocolQualifiers< T >::qual_empty(), clang::SplitQualType::Quals, clang::ObjCProtocolQualifiers< T >::quals(), clang::DiagnosticsEngine::Report(), clang::QualType::split(), clang::Target, and clang::SplitQualType::Ty.