clang  3.9.0
Macros | Enumerations | Functions
SemaType.cpp File Reference
#include "TypeLocBuilder.h"
#include "clang/AST/ASTConsumer.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/ASTMutationListener.h"
#include "clang/AST/CXXInheritance.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/Expr.h"
#include "clang/AST/TypeLoc.h"
#include "clang/AST/TypeLocVisitor.h"
#include "clang/Basic/PartialDiagnostic.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/Sema/DeclSpec.h"
#include "clang/Sema/DelayedDiagnostic.h"
#include "clang/Sema/Lookup.h"
#include "clang/Sema/ScopeInfo.h"
#include "clang/Sema/SemaInternal.h"
#include "clang/Sema/Template.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Support/ErrorHandling.h"
#include "clang/Basic/OpenCLImageTypes.def"
Include dependency graph for SemaType.cpp:

Go to the source code of this file.

Macros

#define OBJC_POINTER_TYPE_ATTRS_CASELIST
 
#define CALLING_CONV_ATTRS_CASELIST
 
#define FUNCTION_TYPE_ATTRS_CASELIST
 
#define MS_TYPE_ATTRS_CASELIST
 
#define NULLABILITY_TYPE_ATTRS_CASELIST
 
#define GENERIC_IMAGE_TYPE(ImgType, Id)
 
#define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix)
 

Enumerations

enum  TypeDiagSelector { TDS_Function, TDS_Pointer, TDS_ObjCObjOrBlock }
 
enum  TypeAttrLocation { TAL_DeclSpec, TAL_DeclChunk, TAL_DeclName }
 The location of a type attribute. More...
 
enum  QualifiedFunctionKind
 Kinds of declarator that cannot contain a qualified function type. More...
 
enum  SimplePointerKind
 A simple notion of pointer kinds, which matches up with the various pointer declarators. More...
 
enum  PointerDeclaratorKind
 Describes the kind of a pointer a declarator describes. More...
 

Functions

static bool isOmittedBlockReturnType (const Declarator &D)
 isOmittedBlockReturnType - Return true if this declarator is missing a return type because this is a omitted return type on a block literal. More...
 
static void diagnoseBadTypeAttribute (Sema &S, const AttributeList &attr, QualType type)
 diagnoseBadTypeAttribute - Diagnoses a type attribute which doesn't apply to the given type. More...
 
static void spliceAttrIntoList (AttributeList &attr, AttributeList *&head)
 
static void spliceAttrOutOfList (AttributeList &attr, AttributeList *&head)
 
static void moveAttrFromListToList (AttributeList &attr, AttributeList *&fromList, AttributeList *&toList)
 
static void processTypeAttrs (TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, AttributeList *attrs)
 
static bool handleFunctionTypeAttr (TypeProcessingState &state, AttributeList &attr, QualType &type)
 Process an individual function attribute. More...
 
static bool handleMSPointerTypeQualifierAttr (TypeProcessingState &state, AttributeList &attr, QualType &type)
 
static bool handleObjCGCTypeAttr (TypeProcessingState &state, AttributeList &attr, QualType &type)
 handleObjCGCTypeAttr - Process the attribute((objc_gc)) type attribute on the specified type. More...
 
static bool handleObjCOwnershipTypeAttr (TypeProcessingState &state, AttributeList &attr, QualType &type)
 handleObjCOwnershipTypeAttr - Process an objc_ownership attribute on the specified type. More...
 
static bool handleObjCPointerTypeAttr (TypeProcessingState &state, AttributeList &attr, QualType &type)
 
static DeclaratorChunkmaybeMovePastReturnType (Declarator &declarator, unsigned i, bool onlyBlockPointers)
 Given the index of a declarator chunk, check whether that chunk directly specifies the return type of a function and, if so, find an appropriate place for it. More...
 
static void distributeObjCPointerTypeAttr (TypeProcessingState &state, AttributeList &attr, QualType type)
 Given that an objc_gc attribute was written somewhere on a declaration other than on the declarator itself (for which, use distributeObjCPointerTypeAttrFromDeclarator), and given that it didn't apply in whatever position it was written in, try to move it to a more appropriate position. More...
 
static void distributeObjCPointerTypeAttrFromDeclarator (TypeProcessingState &state, AttributeList &attr, QualType &declSpecType)
 Distribute an objc_gc type attribute that was written on the declarator. More...
 
static void distributeFunctionTypeAttr (TypeProcessingState &state, AttributeList &attr, QualType type)
 A function type attribute was written somewhere in a declaration other than on the declarator itself or in the decl spec. More...
 
static bool distributeFunctionTypeAttrToInnermost (TypeProcessingState &state, AttributeList &attr, AttributeList *&attrList, QualType &declSpecType)
 Try to distribute a function type attribute to the innermost function chunk or type. More...
 
static void distributeFunctionTypeAttrFromDeclSpec (TypeProcessingState &state, AttributeList &attr, QualType &declSpecType)
 A function type attribute was written in the decl spec. More...
 
static void distributeFunctionTypeAttrFromDeclarator (TypeProcessingState &state, AttributeList &attr, QualType &declSpecType)
 A function type attribute was written on the declarator. More...
 
static void distributeTypeAttrsFromDeclarator (TypeProcessingState &state, QualType &declSpecType)
 Given that there are attributes written on the declarator itself, try to distribute any type attributes to the appropriate declarator chunk. More...
 
static void maybeSynthesizeBlockSignature (TypeProcessingState &state, QualType declSpecType)
 Add a synthetic '()' to a block-literal declarator if it is required, given the return type. More...
 
static void diagnoseAndRemoveTypeQualifiers (Sema &S, const DeclSpec &DS, unsigned &TypeQuals, QualType TypeSoFar, unsigned RemoveTQs, unsigned DiagID)
 
static bool checkOmittedBlockReturnType (Sema &S, Declarator &declarator, QualType Result)
 Return true if this is omitted block return type. More...
 
static QualType applyObjCTypeArgs (Sema &S, SourceLocation loc, QualType type, ArrayRef< TypeSourceInfo * > typeArgs, SourceRange typeArgsRange, bool failOnError=false)
 Apply Objective-C type arguments to the given type. More...
 
static QualType applyObjCProtocolQualifiers (Sema &S, SourceLocation loc, SourceRange range, QualType type, ArrayRef< ObjCProtocolDecl * > protocols, const SourceLocation *protocolLocs, bool failOnError=false)
 Apply Objective-C protocol qualifiers to the given type. More...
 
static StringRef getImageAccessAttrStr (AttributeList *attrs)
 
static QualType ConvertDeclSpecToType (TypeProcessingState &state)
 Convert the specified declspec to the appropriate type object. More...
 
static std::string getPrintableNameForEntity (DeclarationName Entity)
 
static QualType inferARCLifetimeForPointee (Sema &S, QualType type, SourceLocation loc, bool isReference)
 Given that we're building a pointer or reference to the given. More...
 
static std::string getFunctionQualifiersAsString (const FunctionProtoType *FnTy)
 
static bool checkQualifiedFunction (Sema &S, QualType T, SourceLocation Loc, QualifiedFunctionKind QFK)
 Check whether the type T is a qualified function type, and if it is, diagnose that it cannot be contained within the given kind of declarator. More...
 
static bool isArraySizeVLA (Sema &S, Expr *ArraySize, llvm::APSInt &SizeVal)
 Check whether the specified array size makes the array type a VLA. More...
 
static void checkExtParameterInfos (Sema &S, ArrayRef< QualType > paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref< SourceLocation(unsigned)> getParamLoc)
 Check the extended parameter information. More...
 
static void transferARCOwnershipToDeclaratorChunk (TypeProcessingState &state, Qualifiers::ObjCLifetime ownership, unsigned chunkIndex)
 
static void inferARCWriteback (TypeProcessingState &state, QualType &declSpecType)
 Given that this is the declaration of a parameter under ARC, attempt to infer attributes and such for pointer-to-whatever types. More...
 
static void diagnoseRedundantReturnTypeQualifiers (Sema &S, QualType RetTy, Declarator &D, unsigned FunctionChunkIndex)
 
static QualType GetDeclSpecTypeForDeclarator (TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo)
 
static void warnAboutAmbiguousFunction (Sema &S, Declarator &D, DeclaratorChunk &DeclType, QualType RT)
 Produce an appropriate diagnostic for an ambiguity between a function declarator and a C++ direct-initializer. More...
 
static CallingConv getCCForDeclaratorChunk (Sema &S, Declarator &D, const DeclaratorChunk::FunctionTypeInfo &FTI, unsigned ChunkIndex)
 Helper for figuring out the default CC for a function declarator type. More...
 
static bool hasNullabilityAttr (const AttributeList *attrs)
 Check whether there is a nullability attribute of any kind in the given attribute list. More...
 
static PointerDeclaratorKind classifyPointerDeclarator (Sema &S, QualType type, Declarator &declarator)
 Classify the given declarator, whose type-specified is type, based on what kind of pointer it refers to. More...
 
static FileID getNullabilityCompletenessCheckFileID (Sema &S, SourceLocation loc)
 
static void checkNullabilityConsistency (TypeProcessingState &state, SimplePointerKind pointerKind, SourceLocation pointerLoc)
 Check for consistent use of nullability. More...
 
static TypeSourceInfoGetFullTypeForDeclarator (TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo)
 
static void transferARCOwnershipToDeclSpec (Sema &S, QualType &declSpecTy, Qualifiers::ObjCLifetime ownership)
 
static void transferARCOwnership (TypeProcessingState &state, QualType &declSpecTy, Qualifiers::ObjCLifetime ownership)
 Used for transferring ownership in casts resulting in l-values. More...
 
static AttributeList::Kind getAttrListKind (AttributedType::Kind kind)
 Map an AttributedType::Kind to an AttributeList::Kind. More...
 
static void fillAttributedTypeLoc (AttributedTypeLoc TL, const AttributeList *attrs, const AttributeList *DeclAttrs=nullptr)
 
static void fillAtomicQualLoc (AtomicTypeLoc ATL, const DeclaratorChunk &Chunk)
 
static void HandleAddressSpaceTypeAttribute (QualType &Type, const AttributeList &Attr, Sema &S)
 HandleAddressSpaceTypeAttribute - Process an address_space attribute on the specified type. More...
 
static bool hasDirectOwnershipQualifier (QualType type)
 Does this type have a "direct" ownership qualifier? That is, is it written like "__strong id", as opposed to something like "typeof(foo)", where that happens to be strong? More...
 
static NullabilityKind mapNullabilityAttrKind (AttributeList::Kind kind)
 Map a nullability attribute kind to a nullability kind. More...
 
static bool distributeNullabilityTypeAttr (TypeProcessingState &state, QualType type, AttributeList &attr)
 Distribute a nullability type attribute that cannot be applied to the type specifier to a pointer, block pointer, or member pointer declarator, complaining if necessary. More...
 
static AttributedType::Kind getCCTypeAttrKind (AttributeList &Attr)
 
static void HandleVectorSizeAttr (QualType &CurType, const AttributeList &Attr, Sema &S)
 HandleVectorSizeAttribute - this attribute is only applicable to integral and float scalars, although arrays, pointers, and function return values are allowed in conjunction with this construct. More...
 
static void HandleExtVectorTypeAttr (QualType &CurType, const AttributeList &Attr, Sema &S)
 Process the OpenCL-like ext_vector_type attribute when it occurs on a type. More...
 
static bool isPermittedNeonBaseType (QualType &Ty, VectorType::VectorKind VecKind, Sema &S)
 
static void HandleNeonVectorTypeAttr (QualType &CurType, const AttributeList &Attr, Sema &S, VectorType::VectorKind VecKind)
 HandleNeonVectorTypeAttr - The "neon_vector_type" and "neon_polyvector_type" attributes are used to create vector types that are mangled according to ARM's ABI. More...
 
static void HandleOpenCLAccessAttr (QualType &CurType, const AttributeList &Attr, Sema &S)
 Handle OpenCL Access Qualifier Attribute. More...
 
static void assignInheritanceModel (Sema &S, CXXRecordDecl *RD)
 Locks in the inheritance model for the given class and all of its bases. More...
 
static unsigned getLiteralDiagFromTagKind (TagTypeKind Tag)
 Get diagnostic select index for tag kind for literal type diagnostic message. More...
 
static QualType getDecltypeForExpr (Sema &S, Expr *E)
 getDecltypeForExpr - Given an expr, will return the decltype for that expression, according to the rules in C++11 [dcl.type.simple]p4 and C++11 [expr.lambda.prim]p18. More...
 

Macro Definition Documentation

#define CALLING_CONV_ATTRS_CASELIST
Value:
case AttributeList::AT_CDecl: \
case AttributeList::AT_FastCall: \
case AttributeList::AT_StdCall: \
case AttributeList::AT_ThisCall: \
case AttributeList::AT_Pascal: \
case AttributeList::AT_SwiftCall: \
case AttributeList::AT_VectorCall: \
case AttributeList::AT_MSABI: \
case AttributeList::AT_SysVABI: \
case AttributeList::AT_Pcs: \
case AttributeList::AT_IntelOclBicc: \
case AttributeList::AT_PreserveMost: \
case AttributeList::AT_PreserveAll

Definition at line 104 of file SemaType.cpp.

Referenced by getCCForDeclaratorChunk().

#define FUNCTION_TYPE_ATTRS_CASELIST
Value:
case AttributeList::AT_NoReturn: \
case AttributeList::AT_Regparm: \
#define CALLING_CONV_ATTRS_CASELIST
Definition: SemaType.cpp:104

Definition at line 120 of file SemaType.cpp.

Referenced by distributeTypeAttrsFromDeclarator(), and processTypeAttrs().

#define GENERIC_IMAGE_TYPE (   ImgType,
  Id 
)
Value:
case DeclSpec::TST_##ImgType##_t: \
Result = llvm::StringSwitch<QualType>( \
getImageAccessAttrStr(DS.getAttributes().getList())) \
.Cases("write_only", "__write_only", Context.Id##WOTy) \
.Cases("read_write", "__read_write", Context.Id##RWTy) \
.Default(Context.Id##ROTy); \
break;
ASTContext * Context
static StringRef getImageAccessAttrStr(AttributeList *attrs)
Definition: SemaType.cpp:1223
#define IMAGE_TYPE (   ImgType,
  Id,
  SingletonId,
  Access,
  Suffix 
)
Value:
case BuiltinType::Id: \
PrevAccessQual = #Access; \
break;
#define MS_TYPE_ATTRS_CASELIST
Value:
case AttributeList::AT_Ptr32: \
case AttributeList::AT_Ptr64: \
case AttributeList::AT_SPtr: \
case AttributeList::AT_UPtr

Definition at line 126 of file SemaType.cpp.

Referenced by distributeTypeAttrsFromDeclarator(), and processTypeAttrs().

#define NULLABILITY_TYPE_ATTRS_CASELIST
Value:
case AttributeList::AT_TypeNonNull: \
case AttributeList::AT_TypeNullable: \
case AttributeList::AT_TypeNullUnspecified

Definition at line 133 of file SemaType.cpp.

Referenced by distributeTypeAttrsFromDeclarator(), and processTypeAttrs().

#define OBJC_POINTER_TYPE_ATTRS_CASELIST
Value:
case AttributeList::AT_ObjCGC: \
case AttributeList::AT_ObjCOwnership

Definition at line 99 of file SemaType.cpp.

Referenced by distributeTypeAttrsFromDeclarator(), and processTypeAttrs().

Enumeration Type Documentation

enum PointerDeclaratorKind
strong

Describes the kind of a pointer a declarator describes.

Definition at line 3262 of file SemaType.cpp.

Kinds of declarator that cannot contain a qualified function type.

C++98 [dcl.fct]p4 / C++11 [dcl.fct]p6: a function type with a cv-qualifier or a ref-qualifier can only appear at the topmost level of a type.

Parens and member pointers are permitted. We don't diagnose array and function declarators, because they don't allow function types at all.

The values of this enum are used in diagnostics.

Definition at line 1918 of file SemaType.cpp.

enum SimplePointerKind
strong

A simple notion of pointer kinds, which matches up with the various pointer declarators.

Definition at line 3211 of file SemaType.cpp.

The location of a type attribute.

Enumerator
TAL_DeclSpec 

The attribute is in the decl-specifier-seq.

TAL_DeclChunk 

The attribute is part of a DeclaratorChunk.

TAL_DeclName 

The attribute is immediately after the declaration's name.

Definition at line 281 of file SemaType.cpp.

Enumerator
TDS_Function 
TDS_Pointer 
TDS_ObjCObjOrBlock 

Definition at line 40 of file SemaType.cpp.

Function Documentation

static QualType applyObjCProtocolQualifiers ( Sema S,
SourceLocation  loc,
SourceRange  range,
QualType  type,
ArrayRef< ObjCProtocolDecl * >  protocols,
const SourceLocation protocolLocs,
bool  failOnError = false 
)
static
static QualType applyObjCTypeArgs ( Sema S,
SourceLocation  loc,
QualType  type,
ArrayRef< TypeSourceInfo * >  typeArgs,
SourceRange  typeArgsRange,
bool  failOnError = false 
)
static
static void assignInheritanceModel ( Sema S,
CXXRecordDecl RD 
)
static
static void checkExtParameterInfos ( Sema S,
ArrayRef< QualType paramTypes,
const FunctionProtoType::ExtProtoInfo EPI,
llvm::function_ref< SourceLocation(unsigned)>  getParamLoc 
)
static
static void checkNullabilityConsistency ( TypeProcessingState &  state,
SimplePointerKind  pointerKind,
SourceLocation  pointerLoc 
)
static
static bool checkOmittedBlockReturnType ( Sema S,
Declarator declarator,
QualType  Result 
)
static
static bool checkQualifiedFunction ( Sema S,
QualType  T,
SourceLocation  Loc,
QualifiedFunctionKind  QFK 
)
static

Check whether the type T is a qualified function type, and if it is, diagnose that it cannot be contained within the given kind of declarator.

Definition at line 1923 of file SemaType.cpp.

References clang::Sema::Diag(), clang::Type::getAs(), getFunctionQualifiersAsString(), clang::FunctionProtoType::getRefQualifier(), clang::FunctionProtoType::getTypeQuals(), clang::QualType::IgnoreParens(), and clang::RQ_None.

Referenced by clang::Sema::BuildBlockPointerType(), clang::Sema::BuildPointerType(), and clang::Sema::BuildReferenceType().

static PointerDeclaratorKind classifyPointerDeclarator ( Sema S,
QualType  type,
Declarator declarator 
)
static
static QualType ConvertDeclSpecToType ( TypeProcessingState &  state)
static

Convert the specified declspec to the appropriate type object.

Parameters
stateSpecifies the declarator containing the declaration specifier to be converted, along with other associated processing state.
Returns
The type described by the declaration specifiers. This function never returns null.

Definition at line 1244 of file SemaType.cpp.

References clang::Auto, clang::sema::LambdaScopeInfo::AutoTemplateParameterDepth, clang::sema::LambdaScopeInfo::AutoTemplateParams, clang::ASTContext::BoolTy, clang::Sema::BuildAtomicType(), clang::Sema::BuildDecltypeType(), clang::Sema::BuildTypeofExprType(), clang::Sema::BuildUnaryTransformType(), clang::ASTContext::Char16Ty, clang::ASTContext::Char32Ty, clang::ASTContext::CharTy, checkOmittedBlockReturnType(), clang::Sema::Context, Context, clang::TemplateTypeParmDecl::Create(), clang::FixItHint::CreateInsertion(), clang::DecltypeAuto, clang::ASTContext::DependentTy, clang::Sema::Diag(), clang::Sema::DiagnoseUseOfDecl(), clang::ASTContext::DoubleTy, E, clang::UnaryTransformType::EnumUnderlyingType, clang::ASTContext::Float128Ty, clang::ASTContext::FloatTy, clang::Type::getAs(), clang::ASTContext::getAutoDeductType(), clang::ASTContext::getAutoType(), clang::Declarator::getContext(), clang::Sema::getCurLambda(), clang::Declarator::getDeclSpec(), clang::Sema::getElaboratedType(), clang::Declarator::getIdentifierLoc(), clang::TypeWithKeyword::getKeywordForTypeSpec(), clang::Sema::getLangOpts(), clang::DeclSpec::getLocStart(), clang::Declarator::getLocStart(), clang::Sema::getOpenCLOptions(), clang::ASTContext::getPrintingPolicy(), clang::DeclSpec::getRepAsDecl(), clang::DeclSpec::getRepAsExpr(), clang::DeclSpec::getRepAsType(), clang::ASTContext::getSignedWCharType(), clang::DeclSpec::getSourceRange(), clang::DeclSpec::getSpecifierName(), clang::ASTContext::getTargetInfo(), clang::ASTContext::getTranslationUnitDecl(), clang::ASTContext::getTypeDeclType(), clang::TypeDecl::getTypeForDecl(), clang::Sema::GetTypeFromParser(), clang::ASTContext::getTypeOfType(), clang::DeclSpec::getTypeSpecComplex(), clang::DeclSpec::getTypeSpecScope(), clang::DeclSpec::getTypeSpecSign(), clang::DeclSpec::getTypeSpecSignLoc(), clang::DeclSpec::getTypeSpecType(), clang::DeclSpec::getTypeSpecTypeLoc(), clang::DeclSpec::getTypeSpecTypeNameLoc(), clang::DeclSpec::getTypeSpecWidth(), clang::DeclSpec::getTypeSpecWidthLoc(), clang::ASTContext::getUnsignedWCharType(), clang::GNUAutoType, clang::ASTContext::HalfTy, clang::Declarator::hasEllipsis(), clang::TargetInfo::hasFloat128Type(), clang::TargetInfo::hasInt128Type(), clang::DeclSpec::hasTypeSpecifier(), clang::if(), clang::ASTContext::Int128Ty, clang::ASTContext::IntTy, clang::DeclSpec::isEmpty(), clang::SourceLocation::isInvalid(), clang::DeclSpec::isTypeSpecPipe(), clang::Declarator::LambdaExprContext, clang::Declarator::LambdaExprParameterContext, clang::ASTContext::LongDoubleTy, clang::ASTContext::LongLongTy, clang::ASTContext::LongTy, clang::Result, clang::Declarator::setInvalidType(), clang::ASTContext::ShortTy, clang::ASTContext::SignedCharTy, clang::DeclSpec::TSS_signed, clang::DeclSpec::TSS_unsigned, clang::DeclSpec::TSS_unspecified, clang::DeclSpec::TST_atomic, clang::DeclSpec::TST_auto, clang::DeclSpec::TST_auto_type, clang::DeclSpec::TST_bool, clang::DeclSpec::TST_char, clang::DeclSpec::TST_char16, clang::DeclSpec::TST_char32, clang::DeclSpec::TST_class, clang::DeclSpec::TST_decimal128, clang::DeclSpec::TST_decimal32, clang::DeclSpec::TST_decimal64, clang::DeclSpec::TST_decltype, clang::DeclSpec::TST_decltype_auto, clang::DeclSpec::TST_double, clang::DeclSpec::TST_enum, clang::DeclSpec::TST_error, clang::DeclSpec::TST_float, clang::DeclSpec::TST_float128, clang::DeclSpec::TST_half, clang::DeclSpec::TST_int, clang::DeclSpec::TST_int128, clang::DeclSpec::TST_interface, clang::DeclSpec::TST_struct, clang::DeclSpec::TST_typename, clang::DeclSpec::TST_typeofExpr, clang::DeclSpec::TST_typeofType, clang::DeclSpec::TST_underlyingType, clang::DeclSpec::TST_union, clang::DeclSpec::TST_unknown_anytype, clang::DeclSpec::TST_unspecified, clang::DeclSpec::TST_void, clang::DeclSpec::TST_wchar, clang::DeclSpec::TSW_long, clang::DeclSpec::TSW_longlong, clang::DeclSpec::TSW_short, clang::DeclSpec::TSW_unspecified, clang::ASTContext::UnknownAnyTy, clang::ASTContext::UnsignedCharTy, clang::ASTContext::UnsignedInt128Ty, clang::ASTContext::UnsignedIntTy, clang::ASTContext::UnsignedLongLongTy, clang::ASTContext::UnsignedLongTy, clang::ASTContext::UnsignedShortTy, clang::ASTContext::VoidTy, and clang::ASTContext::WCharTy.

Referenced by GetDeclSpecTypeForDeclarator().

static void diagnoseAndRemoveTypeQualifiers ( Sema S,
const DeclSpec DS,
unsigned TypeQuals,
QualType  TypeSoFar,
unsigned  RemoveTQs,
unsigned  DiagID 
)
static
static void diagnoseBadTypeAttribute ( Sema S,
const AttributeList attr,
QualType  type 
)
static
static void diagnoseRedundantReturnTypeQualifiers ( Sema S,
QualType  RetTy,
Declarator D,
unsigned  FunctionChunkIndex 
)
static

Definition at line 2705 of file SemaType.cpp.

References clang::DeclaratorChunk::Array, clang::DeclaratorChunk::PointerTypeInfo::AtomicQualLoc, clang::DeclaratorChunk::BlockPointer, clang::DeclaratorChunk::PointerTypeInfo::ConstQualLoc, clang::Sema::diagnoseIgnoredQualifiers(), End, clang::DeclaratorChunk::Fun, clang::DeclaratorChunk::Function, clang::DeclSpec::getAtomicSpecLoc(), clang::DeclSpec::getConstSpecLoc(), clang::QualType::getCVRQualifiers(), clang::Declarator::getDeclSpec(), clang::SourceLocation::getFromRawEncoding(), clang::Declarator::getIdentifierLoc(), clang::UnqualifiedId::getKind(), clang::QualType::getLocalCVRQualifiers(), clang::Declarator::getName(), clang::Declarator::getNumTypeObjects(), clang::DeclSpec::getRestrictSpecLoc(), clang::Declarator::getTypeObject(), clang::DeclSpec::getTypeQualifiers(), clang::DeclSpec::getUnalignedSpecLoc(), clang::DeclSpec::getVolatileSpecLoc(), clang::DeclaratorChunk::FunctionTypeInfo::hasTrailingReturnType(), clang::UnqualifiedId::IK_ConversionFunctionId, clang::Type::isAtomicType(), clang::DeclaratorChunk::Kind, clang::DeclaratorChunk::MemberPointer, clang::DeclaratorChunk::Paren, clang::DeclaratorChunk::Pipe, clang::DeclaratorChunk::Pointer, clang::DeclaratorChunk::Ptr, clang::DeclaratorChunk::Reference, clang::DeclaratorChunk::PointerTypeInfo::RestrictQualLoc, clang::DeclSpec::TQ_atomic, clang::DeclaratorChunk::PointerTypeInfo::TypeQuals, clang::DeclaratorChunk::PointerTypeInfo::UnalignedQualLoc, and clang::DeclaratorChunk::PointerTypeInfo::VolatileQualLoc.

Referenced by GetFullTypeForDeclarator().

static void distributeFunctionTypeAttr ( TypeProcessingState &  state,
AttributeList attr,
QualType  type 
)
static

A function type attribute was written somewhere in a declaration other than on the declarator itself or in the decl spec.

Given that it didn't apply in whatever position it was written in, try to move it to a more appropriate position.

Definition at line 513 of file SemaType.cpp.

References clang::DeclaratorChunk::Array, clang::DeclaratorChunk::BlockPointer, diagnoseBadTypeAttribute(), clang::DeclaratorChunk::Function, clang::DeclaratorChunk::getAttrListRef(), clang::Declarator::getTypeObject(), clang::DeclaratorChunk::Kind, clang::DeclaratorChunk::MemberPointer, moveAttrFromListToList(), clang::DeclaratorChunk::Paren, clang::DeclaratorChunk::Pipe, clang::DeclaratorChunk::Pointer, clang::DeclaratorChunk::Reference, and clang::ast_matchers::type.

Referenced by processTypeAttrs().

static void distributeFunctionTypeAttrFromDeclarator ( TypeProcessingState &  state,
AttributeList attr,
QualType declSpecType 
)
static

A function type attribute was written on the declarator.

Try to apply it somewhere.

Definition at line 595 of file SemaType.cpp.

References distributeFunctionTypeAttrToInnermost(), clang::Declarator::getAttrListRef(), and spliceAttrOutOfList().

Referenced by distributeTypeAttrsFromDeclarator().

static void distributeFunctionTypeAttrFromDeclSpec ( TypeProcessingState &  state,
AttributeList attr,
QualType declSpecType 
)
static

A function type attribute was written in the decl spec.

Try to apply it somewhere.

Definition at line 567 of file SemaType.cpp.

References distributeFunctionTypeAttrToInnermost(), clang::AttributeList::isCXX11Attribute(), and moveAttrFromListToList().

Referenced by processTypeAttrs().

static bool distributeFunctionTypeAttrToInnermost ( TypeProcessingState &  state,
AttributeList attr,
AttributeList *&  attrList,
QualType declSpecType 
)
static

Try to distribute a function type attribute to the innermost function chunk or type.

Returns true if the attribute was distributed, false if no location was found.

Definition at line 546 of file SemaType.cpp.

References clang::DeclaratorChunk::Function, clang::DeclaratorChunk::getAttrListRef(), clang::Declarator::getNumTypeObjects(), clang::Declarator::getTypeObject(), handleFunctionTypeAttr(), clang::DeclaratorChunk::Kind, and moveAttrFromListToList().

Referenced by distributeFunctionTypeAttrFromDeclarator(), and distributeFunctionTypeAttrFromDeclSpec().

static bool distributeNullabilityTypeAttr ( TypeProcessingState &  state,
QualType  type,
AttributeList attr 
)
static
static void distributeObjCPointerTypeAttr ( TypeProcessingState &  state,
AttributeList attr,
QualType  type 
)
static

Given that an objc_gc attribute was written somewhere on a declaration other than on the declarator itself (for which, use distributeObjCPointerTypeAttrFromDeclarator), and given that it didn't apply in whatever position it was written in, try to move it to a more appropriate position.

Definition at line 393 of file SemaType.cpp.

References clang::DeclaratorChunk::Array, clang::DeclaratorChunk::BlockPointer, diagnoseBadTypeAttribute(), clang::DeclaratorChunk::Function, clang::DeclaratorChunk::getAttrListRef(), clang::AttributeList::getKind(), clang::Declarator::getTypeObject(), clang::DeclaratorChunk::Kind, maybeMovePastReturnType(), clang::DeclaratorChunk::MemberPointer, moveAttrFromListToList(), clang::DeclaratorChunk::Paren, clang::DeclaratorChunk::Pipe, clang::DeclaratorChunk::Pointer, clang::DeclaratorChunk::Reference, and clang::ast_matchers::type.

Referenced by processTypeAttrs().

static void distributeObjCPointerTypeAttrFromDeclarator ( TypeProcessingState &  state,
AttributeList attr,
QualType declSpecType 
)
static
static void distributeTypeAttrsFromDeclarator ( TypeProcessingState &  state,
QualType declSpecType 
)
static

Given that there are attributes written on the declarator itself, try to distribute any type attributes to the appropriate declarator chunk.

These are attributes like the following: int f ATTR; int (f ATTR)(); but not necessarily this: int f() ATTR;

Definition at line 621 of file SemaType.cpp.

References distributeFunctionTypeAttrFromDeclarator(), distributeObjCPointerTypeAttrFromDeclarator(), FUNCTION_TYPE_ATTRS_CASELIST, clang::AttributeList::getNext(), MS_TYPE_ATTRS_CASELIST, NULLABILITY_TYPE_ATTRS_CASELIST, and OBJC_POINTER_TYPE_ATTRS_CASELIST.

Referenced by GetDeclSpecTypeForDeclarator().

static void fillAtomicQualLoc ( AtomicTypeLoc  ATL,
const DeclaratorChunk Chunk 
)
static
static void fillAttributedTypeLoc ( AttributedTypeLoc  TL,
const AttributeList attrs,
const AttributeList DeclAttrs = nullptr 
)
static
static AttributeList::Kind getAttrListKind ( AttributedType::Kind  kind)
static
static CallingConv getCCForDeclaratorChunk ( Sema S,
Declarator D,
const DeclaratorChunk::FunctionTypeInfo FTI,
unsigned  ChunkIndex 
)
static
static AttributedType::Kind getCCTypeAttrKind ( AttributeList Attr)
static
static QualType GetDeclSpecTypeForDeclarator ( TypeProcessingState &  state,
TypeSourceInfo *&  ReturnTypeInfo 
)
static

Definition at line 2775 of file SemaType.cpp.

References clang::Declarator::AliasDeclContext, clang::Declarator::AliasTemplateContext, clang::Declarator::BlockContext, clang::Declarator::BlockLiteralContext, clang::Declarator::ConditionContext, clang::DeclSpec::containsPlaceholderType(), clang::Sema::Context, clang::UnqualifiedId::ConversionFunctionId, clang::Declarator::ConversionIdContext, ConvertDeclSpecToType(), clang::Sema::CurContext, clang::Declarator::CXXCatchContext, clang::Declarator::CXXNewContext, clang::Sema::Diag(), distributeTypeAttrsFromDeclarator(), clang::Declarator::FileContext, clang::Declarator::ForContext, clang::DeclaratorChunk::Fun, clang::DeclaratorChunk::Function, clang::DeclSpec::getAttributes(), clang::Declarator::getAttributes(), clang::SourceRange::getBegin(), clang::Declarator::getContext(), clang::Declarator::getDeclSpec(), clang::UnqualifiedId::getKind(), clang::Sema::getLangOpts(), clang::ParsedAttributes::getList(), clang::Declarator::getName(), clang::Declarator::getNumTypeObjects(), clang::DeclSpec::getRepAsDecl(), clang::UnqualifiedId::getSourceRange(), clang::DeclSpec::getStorageClassSpec(), clang::ASTContext::getTypeDeclType(), clang::Sema::GetTypeFromParser(), clang::Declarator::getTypeObject(), clang::DeclSpec::getTypeSpecType(), clang::DeclSpec::getTypeSpecTypeLoc(), clang::DeclaratorChunk::FunctionTypeInfo::hasTrailingReturnType(), clang::UnqualifiedId::IK_ConstructorName, clang::UnqualifiedId::IK_ConstructorTemplateId, clang::UnqualifiedId::IK_ConversionFunctionId, clang::UnqualifiedId::IK_DestructorName, clang::UnqualifiedId::IK_Identifier, clang::UnqualifiedId::IK_ImplicitSelfParam, clang::UnqualifiedId::IK_LiteralOperatorId, clang::UnqualifiedId::IK_OperatorFunctionId, clang::UnqualifiedId::IK_TemplateId, clang::Declarator::InitStmtContext, clang::ASTContext::IntTy, clang::TagDecl::isCompleteDefinition(), clang::Declarator::isFunctionDeclarator(), clang::Declarator::isInvalidType(), clang::QualType::isNull(), clang::DeclSpec::isTypeSpecOwned(), clang::DeclaratorChunk::Kind, clang::Declarator::KNRTypeListContext, clang::Declarator::LambdaExprContext, clang::Declarator::LambdaExprParameterContext, clang::Declarator::MemberContext, clang::Declarator::ObjCCatchContext, clang::Declarator::ObjCParameterContext, clang::Declarator::ObjCResultContext, processTypeAttrs(), clang::Declarator::PrototypeContext, clang::DeclSpec::SCS_static, clang::DeclSpec::SCS_typedef, clang::TagDecl::setEmbeddedInDeclarator(), clang::Declarator::setInvalidType(), TAL_DeclSpec, clang::Declarator::TemplateParamContext, clang::Declarator::TemplateTypeArgContext, clang::Declarator::TrailingReturnContext, clang::DeclSpec::TST_auto, clang::DeclSpec::TST_auto_type, clang::DeclSpec::TST_decltype_auto, clang::TTK_Class, clang::TTK_Enum, clang::TTK_Interface, clang::TTK_Struct, clang::TTK_Union, clang::Declarator::TypeNameContext, and clang::ASTContext::VoidTy.

Referenced by clang::Sema::GetTypeForDeclarator(), and clang::Sema::GetTypeForDeclaratorCast().

static QualType getDecltypeForExpr ( Sema S,
Expr E 
)
static
static TypeSourceInfo* GetFullTypeForDeclarator ( TypeProcessingState &  state,
QualType  declSpecType,
TypeSourceInfo TInfo 
)
static

Never complain.

Complain on the inner pointers (but not the outermost pointer).

Complain about any pointers that don't have nullability specified or inferred.

Definition at line 3487 of file SemaType.cpp.

References clang::Sema::ActiveTemplateInstantiations, clang::QualType::addConst(), clang::Declarator::AliasDeclContext, clang::Declarator::AliasTemplateContext, clang::DeclaratorChunk::Arr, clang::DeclaratorChunk::Array, clang::AttributeList::AS_ContextSensitiveKeyword, clang::AttributeList::AS_Keyword, clang::Auto, clang::Declarator::BlockContext, clang::Declarator::BlockLiteralContext, clang::DeclaratorChunk::BlockPointer, clang::Sema::BuildArrayType(), clang::Sema::BuildBlockPointerType(), clang::Sema::BuildMemberPointerType(), clang::Sema::BuildParenType(), clang::Sema::BuildPipeType(), clang::Sema::BuildPointerType(), clang::Sema::BuildQualifiedType(), clang::Sema::BuildReferenceType(), clang::Type::canHaveNullability(), clang::Type::castAs(), clang::Sema::CheckDistantExceptionSpec(), clang::Sema::checkExceptionSpecification(), checkExtParameterInfos(), checkNullabilityConsistency(), classifyPointerDeclarator(), clang::DeclaratorChunk::Cls, clang::Sema::computeDeclContext(), clang::Declarator::ConditionContext, clang::Qualifiers::Const, clang::DeclSpec::containsPlaceholderType(), clang::Type::containsUnexpandedParameterPack(), clang::Sema::Context, Context, clang::Declarator::ConversionIdContext, clang::FixItHint::CreateInsertion(), clang::FixItHint::CreateRemoval(), clang::Declarator::CXXCatchContext, clang::Declarator::CXXNewContext, clang::Sema::Diag(), diagnoseRedundantReturnTypeQualifiers(), clang::ASTContext::DoubleTy, clang::ObjCDeclSpec::DQ_CSNullability, E, clang::DeclaratorChunk::EndLoc, clang::EST_ComputedNoexcept, clang::EST_Dynamic, clang::ETK_None, clang::DeclaratorChunk::FunctionTypeInfo::Exceptions, clang::FunctionProtoType::ExtProtoInfo::ExceptionSpec, clang::FunctionProtoType::ExtProtoInfo::ExtInfo, clang::FunctionProtoType::ExtProtoInfo::ExtParameterInfos, clang::FDK_Definition, clang::Declarator::FileContext, clang::Declarator::ForContext, clang::DeclaratorChunk::Fun, clang::DeclaratorChunk::Function, clang::Type::getAs(), clang::NestedNameSpecifier::getAsIdentifier(), clang::NestedNameSpecifier::getAsType(), clang::ASTContext::getAttributedType(), clang::DeclSpec::getAttributes(), clang::Declarator::getAttributes(), clang::DeclaratorChunk::getAttrListRef(), clang::DeclaratorChunk::getAttrs(), clang::CXXScopeSpec::getBeginLoc(), getCCForDeclaratorChunk(), clang::DeclaratorChunk::FunctionTypeInfo::getConstQualifierLoc(), clang::Type::getContainedAutoType(), clang::Declarator::getContext(), clang::Declarator::getCXXScopeSpec(), clang::Declarator::getDeclSpec(), clang::ASTContext::getDependentNameType(), clang::ASTContext::getElaboratedType(), clang::DeclaratorChunk::FunctionTypeInfo::getEllipsisLoc(), clang::Declarator::getEllipsisLoc(), clang::DeclaratorChunk::FunctionTypeInfo::getExceptionSpecLocBeg(), clang::DeclaratorChunk::FunctionTypeInfo::getExceptionSpecType(), clang::FunctionProtoType::getExtProtoInfo(), clang::Declarator::getFunctionDefinitionKind(), clang::ASTContext::getFunctionNoProtoType(), getFunctionQualifiersAsString(), clang::ASTContext::getFunctionType(), clang::Declarator::getIdentifier(), clang::Declarator::getIdentifierLoc(), clang::SourceManager::getImmediateExpansionRange(), clang::Declarator::getInnermostNonParenChunk(), clang::Attr::getKind(), clang::NestedNameSpecifier::getKind(), clang::UnqualifiedId::getKind(), clang::Sema::getLangOpts(), clang::ParsedAttributes::getList(), clang::ParsedAttributes::getListRef(), clang::TypeLoc::getLocEnd(), clang::DeclSpec::getLocEnd(), clang::Sema::getLocForEndOfToken(), clang::TypeLoc::getLocStart(), clang::Declarator::getLocStart(), clang::Declarator::getMutableDeclSpec(), clang::IdentifierInfo::getName(), clang::Declarator::getName(), clang::AttributeList::getNext(), clang::Type::getNullability(), clang::AttributedType::getNullabilityAttrKind(), getNullabilityCompletenessCheckFileID(), clang::Sema::getNullabilityKeyword(), clang::Declarator::getNumTypeObjects(), clang::ASTContext::getObjCObjectPointerType(), clang::Sema::getOpenCLOptions(), clang::ASTContext::getPackExpansionType(), clang::FunctionProtoType::getParamTypes(), clang::Preprocessor::getPragmaAssumeNonNullLoc(), clang::NestedNameSpecifier::getPrefix(), getPrintableNameForEntity(), clang::ASTContext::getPromotedIntegerType(), clang::CXXScopeSpec::getRange(), clang::DeclaratorChunk::FunctionTypeInfo::getRefQualifierLoc(), clang::DeclSpec::getRepAsDecl(), clang::DeclaratorChunk::FunctionTypeInfo::getRestrictQualifierLoc(), clang::FunctionType::getReturnType(), clang::CXXScopeSpec::getScopeRep(), clang::Sema::getSourceManager(), clang::DeclSpec::getSourceRange(), clang::Declarator::getSourceRange(), clang::DeclSpec::getStorageClassSpec(), clang::DeclaratorChunk::FunctionTypeInfo::getTrailingReturnType(), clang::ASTContext::getTrivialTypeSourceInfo(), clang::ValueDecl::getType(), clang::ASTContext::getTypeDeclType(), clang::Sema::GetTypeFromParser(), clang::TypeSourceInfo::getTypeLoc(), clang::Declarator::getTypeObject(), clang::TypeLocBuilder::getTypeSourceInfo(), clang::Sema::GetTypeSourceInfoForDeclarator(), clang::DeclSpec::getTypeSpecType(), clang::DeclSpec::getTypeSpecTypeLoc(), clang::DeclaratorChunk::FunctionTypeInfo::getVolatileQualifierLoc(), clang::NestedNameSpecifier::Global, clang::Declarator::hasEllipsis(), hasNullabilityAttr(), clang::DeclaratorChunk::FunctionTypeInfo::hasPrototype, clang::DeclaratorChunk::FunctionTypeInfo::hasRefQualifier(), clang::DeclaratorChunk::ReferenceTypeInfo::HasRestrict, clang::DeclaratorChunk::ArrayTypeInfo::hasStatic, clang::DeclSpec::hasTagDefinition(), clang::FunctionProtoType::ExtProtoInfo::HasTrailingReturn, clang::DeclaratorChunk::FunctionTypeInfo::hasTrailingReturnType(), I, clang::DeclaratorChunk::ParamInfo::Ident, clang::NestedNameSpecifier::Identifier, clang::DeclaratorChunk::ParamInfo::IdentLoc, clang::UnqualifiedId::IK_ConversionFunctionId, clang::Declarator::InitStmtContext, clang::ASTContext::IntTy, clang::DeclaratorChunk::FunctionTypeInfo::isAmbiguous, clang::Type::isBlockPointerType(), clang::DeclSpec::isConstexprSpecified(), clang::AutoType::isDecltypeAuto(), clang::Sema::isDependentScopeSpecifier(), clang::DeclSpec::isFriendSpecified(), clang::Declarator::isFunctionDeclarationContext(), clang::Declarator::isFunctionDeclarator(), isFunctionOrMethod(), clang::Type::isFunctionProtoType(), clang::Type::isFunctionType(), clang::SourceLocation::isInvalid(), clang::CXXScopeSpec::isInvalid(), clang::Declarator::isInvalidType(), clang::SourceLocation::isMacroID(), clang::Type::isMemberPointerType(), clang::QualType::isNull(), clang::Type::isObjectType(), clang::Declarator::isPrototypeContext(), clang::DeclContext::isRecord(), clang::CXXScopeSpec::isSet(), clang::DeclaratorChunk::ArrayTypeInfo::isStar, clang::FileID::isValid(), clang::SourceLocation::isValid(), clang::DeclaratorChunk::FunctionTypeInfo::isVariadic, clang::DeclaratorChunk::Kind, clang::Declarator::KNRTypeListContext, clang::Declarator::LambdaExprContext, clang::Declarator::LambdaExprParameterContext, clang::DeclaratorChunk::Loc, clang::DeclaratorChunk::ReferenceTypeInfo::LValueRef, clang::DeclaratorChunk::Mem, clang::Declarator::MemberContext, clang::DeclaratorChunk::MemberPointer, clang::Name, clang::NestedNameSpecifier::Namespace, clang::NestedNameSpecifier::NamespaceAlias, clang::DeclaratorChunk::FunctionTypeInfo::NoexceptExpr, clang::None, clang::NonNull, clang::ArrayType::Normal, clang::Sema::NullabilityMap, clang::Nullable, clang::DeclaratorChunk::ArrayTypeInfo::NumElts, clang::DeclaratorChunk::FunctionTypeInfo::NumExceptions, clang::DeclaratorChunk::FunctionTypeInfo::NumParams, clang::Declarator::ObjCCatchContext, clang::Declarator::ObjCParameterContext, clang::Declarator::ObjCResultContext, clang::DeclaratorChunk::ParamInfo::Param, clang::DeclaratorChunk::FunctionTypeInfo::Params, clang::DeclaratorChunk::Paren, clang::DeclaratorChunk::Pipe, clang::DeclaratorChunk::Pointer, clang::FileNullability::PointerKind, clang::FileNullability::PointerLoc, clang::Sema::PP, processTypeAttrs(), clang::Declarator::PrototypeContext, clang::DeclaratorChunk::Ptr, clang::TypeLocBuilder::push(), clang::TypeLocBuilder::pushFullCopy(), clang::DeclaratorChunk::TypeAndRange::Range, clang::DeclaratorChunk::Ref, clang::DeclaratorChunk::Reference, clang::FunctionProtoType::ExtProtoInfo::RefQualifier, clang::DeclaratorChunk::FunctionTypeInfo::RefQualifierIsLValueRef, clang::Qualifiers::Restrict, clang::RQ_LValue, clang::RQ_None, clang::RQ_RValue, clang::FileNullability::SawTypeNullability, clang::DeclaratorChunk::MemberPointerTypeInfo::Scope(), clang::DeclSpec::SCS_static, clang::DeclSpec::SCS_typedef, clang::Declarator::setEllipsisLoc(), clang::Declarator::setInvalidType(), clang::ParmVarDecl::setKNRPromoted(), clang::ObjCObjectPointerTypeLoc::setStarLoc(), clang::ValueDecl::setType(), clang::Sema::SourceMgr, spliceAttrIntoList(), clang::ArrayType::Star, clang::ArrayType::Static, clang::NestedNameSpecifier::Super, TAL_DeclChunk, TAL_DeclName, clang::Declarator::TemplateParamContext, clang::Declarator::TemplateTypeArgContext, clang::DeclSpec::TQ_const, clang::Declarator::TrailingReturnContext, clang::DeclSpec::TST_auto, clang::DeclaratorChunk::TypeAndRange::Ty, clang::Declarator::TypeNameContext, clang::DeclaratorChunk::PointerTypeInfo::TypeQuals, clang::DeclaratorChunk::ArrayTypeInfo::TypeQuals, clang::DeclaratorChunk::FunctionTypeInfo::TypeQuals, clang::DeclaratorChunk::BlockPointerTypeInfo::TypeQuals, clang::DeclaratorChunk::MemberPointerTypeInfo::TypeQuals, clang::FunctionProtoType::ExtProtoInfo::TypeQuals, clang::NestedNameSpecifier::TypeSpec, clang::NestedNameSpecifier::TypeSpecWithTemplate, clang::FunctionProtoType::ExtProtoInfo::Variadic, clang::Qualifiers::Volatile, and warnAboutAmbiguousFunction().

Referenced by clang::Sema::GetTypeForDeclarator(), and clang::Sema::GetTypeForDeclaratorCast().

static std::string getFunctionQualifiersAsString ( const FunctionProtoType FnTy)
static
static StringRef getImageAccessAttrStr ( AttributeList attrs)
static
static unsigned getLiteralDiagFromTagKind ( TagTypeKind  Tag)
static

Get diagnostic select index for tag kind for literal type diagnostic message.

WARNING: Indexes apply to particular diagnostics only!

Returns
diagnostic select index.

Definition at line 7103 of file SemaType.cpp.

References clang::TTK_Class, clang::TTK_Interface, and clang::TTK_Struct.

Referenced by clang::Sema::RequireLiteralType().

static FileID getNullabilityCompletenessCheckFileID ( Sema S,
SourceLocation  loc 
)
static
static std::string getPrintableNameForEntity ( DeclarationName  Entity)
static
static void HandleAddressSpaceTypeAttribute ( QualType Type,
const AttributeList Attr,
Sema S 
)
static
static void HandleExtVectorTypeAttr ( QualType CurType,
const AttributeList Attr,
Sema S 
)
static
static bool handleFunctionTypeAttr ( TypeProcessingState &  state,
AttributeList attr,
QualType type 
)
static
static bool handleMSPointerTypeQualifierAttr ( TypeProcessingState &  state,
AttributeList attr,
QualType type 
)
static
static void HandleNeonVectorTypeAttr ( QualType CurType,
const AttributeList Attr,
Sema S,
VectorType::VectorKind  VecKind 
)
static

HandleNeonVectorTypeAttr - The "neon_vector_type" and "neon_polyvector_type" attributes are used to create vector types that are mangled according to ARM's ABI.

Otherwise, these types are identical to those created with the "vector_size" attribute. Unlike "vector_size" the argument to these Neon attributes is the number of vector elements, not the vector size in bytes. The vector width and element type must match one of the standard Neon vector types.

Definition at line 6452 of file SemaType.cpp.

References clang::AANT_ArgumentIntegerConstant, clang::Sema::Context, clang::Sema::Diag(), clang::AttributeList::getArgAsExpr(), clang::AttributeList::getLoc(), clang::AttributeList::getName(), clang::AttributeList::getNumArgs(), clang::ASTContext::getTargetInfo(), clang::ASTContext::getTypeSize(), clang::ASTContext::getVectorType(), clang::TargetInfo::hasFeature(), clang::Expr::isIntegerConstantExpr(), isPermittedNeonBaseType(), clang::Expr::isTypeDependent(), clang::Expr::isValueDependent(), and clang::AttributeList::setInvalid().

Referenced by processTypeAttrs().

static bool handleObjCGCTypeAttr ( TypeProcessingState &  state,
AttributeList attr,
QualType type 
)
static
static bool handleObjCOwnershipTypeAttr ( TypeProcessingState &  state,
AttributeList attr,
QualType type 
)
static

handleObjCOwnershipTypeAttr - Process an objc_ownership attribute on the specified type.

Returns 'true' if the attribute was handled.

Definition at line 5367 of file SemaType.cpp.

References clang::AANT_ArgumentString, clang::Sema::DelayedDiagnostics::add(), clang::Qualifiers::addObjCLifetime(), clang::AttributedType::attr_objc_inert_unsafe_unretained, clang::AttributedType::attr_objc_ownership, clang::Sema::Context, clang::Sema::DelayedDiagnostics, clang::Sema::Diag(), clang::AttributeList::getArgAsIdent(), clang::Type::getAs(), clang::ASTContext::getAttributedType(), clang::SourceManager::getExpansionLoc(), clang::SourceManager::getImmediateExpansionRange(), clang::Sema::getLangOpts(), clang::AttributeList::getLoc(), clang::IdentifierInfo::getName(), clang::AttributeList::getName(), clang::Declarator::getNumTypeObjects(), clang::Qualifiers::getObjCLifetime(), clang::Type::getPointeeType(), clang::ASTContext::getQualifiedType(), clang::QualType::getQualifiers(), clang::SplitQualType::getSingleStepDesugaredType(), clang::Sema::getSourceManager(), hasDirectOwnershipQualifier(), clang::IdentifierLoc::Ident, clang::AttributeList::isArgIdent(), clang::Type::isDependentType(), clang::SourceLocation::isMacroID(), clang::Type::isObjCRetainableType(), clang::Type::isPointerType(), clang::IdentifierInfo::isStr(), clang::Type::isUndeducedType(), clang::SourceLocation::isValid(), clang::sema::DelayedDiagnostic::makeForbiddenType(), maybeMovePastReturnType(), clang::Qualifiers::OCL_Autoreleasing, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, clang::Qualifiers::OCL_Weak, clang::SplitQualType::Quals, clang::Qualifiers::removeObjCLifetime(), S, clang::AttributeList::setInvalid(), clang::Sema::DelayedDiagnostics::shouldDelayDiagnostics(), clang::QualType::split(), TDS_ObjCObjOrBlock, clang::SplitQualType::Ty, and clang::ast_matchers::type.

Referenced by handleObjCPointerTypeAttr().

static bool handleObjCPointerTypeAttr ( TypeProcessingState &  state,
AttributeList attr,
QualType type 
)
static
static void HandleOpenCLAccessAttr ( QualType CurType,
const AttributeList Attr,
Sema S 
)
static
static void HandleVectorSizeAttr ( QualType CurType,
const AttributeList Attr,
Sema S 
)
static

HandleVectorSizeAttribute - this attribute is only applicable to integral and float scalars, although arrays, pointers, and function return values are allowed in conjunction with this construct.

Aggregates with this attribute are invalid, even if they are of the same size as a corresponding scalar. The raw attribute should contain precisely 1 argument, the vector size for the variable, measured in bytes. If curType and rawAttr are well formed, this routine will return a new vector type.

Definition at line 6303 of file SemaType.cpp.

References clang::AANT_ArgumentIntegerConstant, clang::Sema::Context, clang::Sema::Diag(), clang::VectorType::GenericVector, clang::AttributeList::getArgAsExpr(), clang::AttributeList::getLoc(), clang::AttributeList::getName(), clang::AttributeList::getNumArgs(), clang::ASTContext::getTypeSize(), clang::ASTContext::getVectorType(), clang::Type::isBooleanType(), clang::Type::isBuiltinType(), clang::Expr::isIntegerConstantExpr(), clang::Type::isIntegerType(), clang::Type::isRealFloatingType(), clang::Expr::isTypeDependent(), clang::Expr::isValueDependent(), clang::VectorType::isVectorSizeTooLarge(), and clang::AttributeList::setInvalid().

Referenced by processTypeAttrs().

static bool hasDirectOwnershipQualifier ( QualType  type)
static

Does this type have a "direct" ownership qualifier? That is, is it written like "__strong id", as opposed to something like "typeof(foo)", where that happens to be strong?

Definition at line 5336 of file SemaType.cpp.

References clang::AttributedType::attr_objc_ownership, clang::QualType::getQualifiers(), and clang::Qualifiers::hasObjCLifetime().

Referenced by handleObjCOwnershipTypeAttr().

static bool hasNullabilityAttr ( const AttributeList attrs)
static

Check whether there is a nullability attribute of any kind in the given attribute list.

Definition at line 3248 of file SemaType.cpp.

References clang::AttributeList::getNext().

Referenced by distributeNullabilityTypeAttr(), and GetFullTypeForDeclarator().

static QualType inferARCLifetimeForPointee ( Sema S,
QualType  type,
SourceLocation  loc,
bool  isReference 
)
static
static void inferARCWriteback ( TypeProcessingState &  state,
QualType declSpecType 
)
static
static bool isArraySizeVLA ( Sema S,
Expr ArraySize,
llvm::APSInt &  SizeVal 
)
static

Check whether the specified array size makes the array type a VLA.

If so, return true, if not, return the size of the array in SizeVal.

Definition at line 2050 of file SemaType.cpp.

References clang::Sema::Diag(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::Sema::LangOpts, and clang::Sema::VerifyIntegerConstantExpression().

Referenced by clang::Sema::BuildArrayType().

static bool isOmittedBlockReturnType ( const Declarator D)
static

isOmittedBlockReturnType - Return true if this declarator is missing a return type because this is a omitted return type on a block literal.

Definition at line 48 of file SemaType.cpp.

References clang::Declarator::BlockLiteralContext, clang::DeclaratorChunk::Function, clang::Declarator::getContext(), clang::Declarator::getDeclSpec(), clang::Declarator::getNumTypeObjects(), clang::Declarator::getTypeObject(), clang::DeclSpec::hasTypeSpecifier(), and clang::DeclaratorChunk::Kind.

Referenced by checkOmittedBlockReturnType().

static bool isPermittedNeonBaseType ( QualType Ty,
VectorType::VectorKind  VecKind,
Sema S 
)
static
static NullabilityKind mapNullabilityAttrKind ( AttributeList::Kind  kind)
static

Map a nullability attribute kind to a nullability kind.

Definition at line 5956 of file SemaType.cpp.

References clang::NonNull, clang::Nullable, and clang::Unspecified.

Referenced by distributeNullabilityTypeAttr(), and processTypeAttrs().

static DeclaratorChunk* maybeMovePastReturnType ( Declarator declarator,
unsigned  i,
bool  onlyBlockPointers 
)
static

Given the index of a declarator chunk, check whether that chunk directly specifies the return type of a function and, if so, find an appropriate place for it.

Parameters
i- a notional index which the search will start immediately inside
onlyBlockPointersWhether we should only look into block pointer types (vs. all pointer types).

Definition at line 325 of file SemaType.cpp.

References clang::DeclaratorChunk::Array, clang::DeclaratorChunk::BlockPointer, clang::DeclaratorChunk::Function, clang::Declarator::getNumTypeObjects(), clang::Declarator::getTypeObject(), clang::DeclaratorChunk::Kind, clang::DeclaratorChunk::MemberPointer, clang::DeclaratorChunk::Paren, clang::DeclaratorChunk::Pipe, clang::DeclaratorChunk::Pointer, and clang::DeclaratorChunk::Reference.

Referenced by distributeNullabilityTypeAttr(), distributeObjCPointerTypeAttr(), and handleObjCOwnershipTypeAttr().

static void maybeSynthesizeBlockSignature ( TypeProcessingState &  state,
QualType  declSpecType 
)
static
static void moveAttrFromListToList ( AttributeList attr,
AttributeList *&  fromList,
AttributeList *&  toList 
)
static
static void processTypeAttrs ( TypeProcessingState &  state,
QualType type,
TypeAttrLocation  TAL,
AttributeList attrs 
)
static

Definition at line 6529 of file SemaType.cpp.

References clang::Declarator::BlockContext, clang::Type::canHaveNullability(), clang::FixItHint::CreateInsertion(), clang::FixItHint::CreateRemoval(), distributeFunctionTypeAttr(), distributeFunctionTypeAttrFromDeclSpec(), distributeNullabilityTypeAttr(), distributeObjCPointerTypeAttr(), clang::Declarator::FileContext, FUNCTION_TYPE_ATTRS_CASELIST, clang::QualType::getAddressSpace(), clang::Declarator::getContext(), clang::Declarator::getDeclSpec(), clang::AttributeList::getKind(), clang::AttributeList::getLoc(), clang::AttributeList::getName(), clang::AttributeList::getNext(), clang::AttributeList::getScopeName(), clang::DeclSpec::getStorageClassSpec(), clang::Declarator::getTypeObject(), HandleAddressSpaceTypeAttribute(), HandleExtVectorTypeAttr(), handleFunctionTypeAttr(), handleMSPointerTypeQualifierAttr(), HandleNeonVectorTypeAttr(), handleObjCPointerTypeAttr(), HandleOpenCLAccessAttr(), HandleVectorSizeAttr(), clang::AttributeList::IgnoredAttribute, clang::AttributeList::isContextSensitiveKeywordAttribute(), clang::AttributeList::isCXX11Attribute(), clang::Type::isDependentType(), clang::Declarator::isFunctionDeclarator(), clang::Declarator::isFunctionDefinition(), clang::AttributeList::isInvalid(), clang::Type::isSamplerT(), clang::IdentifierInfo::isStr(), mapNullabilityAttrKind(), MS_TYPE_ATTRS_CASELIST, clang::VectorType::NeonPolyVector, clang::VectorType::NeonVector, NULLABILITY_TYPE_ATTRS_CASELIST, OBJC_POINTER_TYPE_ATTRS_CASELIST, clang::LangAS::opencl_generic, clang::LangAS::opencl_global, clang::DeclaratorChunk::Pointer, clang::DeclSpec::SCS_static, clang::DeclSpec::SCS_typedef, clang::AttributeList::setInvalid(), clang::AttributeList::setUsedAsTypeAttr(), TAL_DeclChunk, TAL_DeclName, TAL_DeclSpec, and clang::AttributeList::UnknownAttribute.

Referenced by GetDeclSpecTypeForDeclarator(), and GetFullTypeForDeclarator().

static void spliceAttrIntoList ( AttributeList attr,
AttributeList *&  head 
)
static
static void spliceAttrOutOfList ( AttributeList attr,
AttributeList *&  head 
)
static
static void transferARCOwnership ( TypeProcessingState &  state,
QualType declSpecTy,
Qualifiers::ObjCLifetime  ownership 
)
static
static void transferARCOwnershipToDeclaratorChunk ( TypeProcessingState &  state,
Qualifiers::ObjCLifetime  ownership,
unsigned  chunkIndex 
)
static
static void transferARCOwnershipToDeclSpec ( Sema S,
QualType declSpecTy,
Qualifiers::ObjCLifetime  ownership 
)
static
static void warnAboutAmbiguousFunction ( Sema S,
Declarator D,
DeclaratorChunk DeclType,
QualType  RT 
)
static

Produce an appropriate diagnostic for an ambiguity between a function declarator and a C++ direct-initializer.

Definition at line 3023 of file SemaType.cpp.

References clang::prec::Comma, clang::Declarator::ConditionContext, clang::FixItHint::CreateInsertion(), clang::FixItHint::CreateRemoval(), clang::FixItHint::CreateReplacement(), clang::Sema::CurContext, clang::Sema::Diag(), E, clang::DeclaratorChunk::EndLoc, clang::FDK_Declaration, clang::DeclaratorChunk::Fun, clang::Type::getAsCXXRecordDecl(), clang::SourceRange::getBegin(), clang::Declarator::getCommaLoc(), clang::Declarator::getContext(), clang::Sema::getCurScope(), clang::Declarator::getDeclSpec(), clang::SourceRange::getEnd(), clang::Sema::getFixItZeroInitializerForType(), clang::Declarator::getFunctionDefinitionKind(), clang::Declarator::getIdentifier(), clang::Declarator::getIdentifierLoc(), clang::Sema::getLocForEndOfToken(), clang::DeclSpec::getStorageClassSpec(), clang::CXXRecordDecl::hasDefinition(), clang::CXXRecordDecl::hasUserProvidedDefaultConstructor(), clang::DeclaratorChunk::FunctionTypeInfo::isAmbiguous, clang::CXXRecordDecl::isEmpty(), clang::Declarator::isFirstDeclarator(), clang::Declarator::isFunctionDeclarator(), clang::DeclContext::isFunctionOrMethod(), clang::Type::isRecordType(), clang::Type::isReferenceType(), clang::Type::isVoidType(), clang::Sema::LangOpts, clang::DeclaratorChunk::Loc, clang::Sema::LookupName(), clang::Sema::LookupOrdinaryName, clang::Name, clang::DeclaratorChunk::FunctionTypeInfo::NumParams, clang::DeclaratorChunk::ParamInfo::Param, clang::DeclaratorChunk::FunctionTypeInfo::Params, clang::Result, clang::DeclSpec::SCS_unspecified, and clang::Sema::SourceMgr.

Referenced by GetFullTypeForDeclarator().