Home | History | Annotate | Download | only in Sema

Lines Matching defs:Attr

65 static void diagnoseBadTypeAttribute(Sema &S, const AttributeList &attr,
69 switch (attr.getKind()) {
79 SourceLocation loc = attr.getLoc();
80 StringRef name = attr.getName()->getName();
83 IdentifierInfo *II = attr.isArgIdent(0) ? attr.getArgAsIdent(0)->Ident
197 for (AttributeList *attr = spec.getAttributes().getList(); attr;
198 attr = attr->getNext())
199 savedAttrs.push_back(attr);
206 void addIgnoredTypeAttr(AttributeList &attr) {
207 ignoredTypeAttrs.push_back(&attr);
213 for (auto *Attr : ignoredTypeAttrs)
214 diagnoseBadTypeAttribute(getSema(), *Attr, type);
244 static void spliceAttrIntoList(AttributeList &attr, AttributeList *&head) {
245 attr.setNext(head);
246 head = &attr;
249 static void spliceAttrOutOfList(AttributeList &attr, AttributeList *&head) {
250 if (head == &attr) {
251 head = attr.getNext();
258 if (cur->getNext() == &attr) {
259 cur->setNext(attr.getNext());
266 static void moveAttrFromListToList(AttributeList &attr,
269 spliceAttrOutOfList(attr, fromList);
270 spliceAttrIntoList(attr, toList);
288 AttributeList &attr,
292 AttributeList &attr,
296 AttributeList &attr, QualType &type);
299 AttributeList &attr, QualType &type);
302 AttributeList &attr, QualType &type) {
303 if (attr.getKind() == AttributeList::AT_ObjCGC)
304 return handleObjCGCTypeAttr(state, attr, type);
305 assert(attr.getKind() == AttributeList::AT_ObjCOwnership);
306 return handleObjCOwnershipTypeAttr(state, attr, type);
385 AttributeList &attr,
399 attr.getKind() == AttributeList::AT_ObjCOwnership)
404 moveAttrFromListToList(attr, state.getCurrentAttrListRef(),
416 attr.getKind() == AttributeList::AT_ObjCOwnership) {
420 moveAttrFromListToList(attr, state.getCurrentAttrListRef(),
435 diagnoseBadTypeAttribute(state.getSema(), attr, type);
442 AttributeList &attr,
474 if (handleObjCPointerTypeAttr(state, attr, declSpecType)) {
479 moveAttrFromListToList(attr, declarator.getAttrListRef(),
488 moveAttrFromListToList(attr, declarator.getAttrListRef(),
494 spliceAttrOutOfList(attr
495 state.addIgnoredTypeAttr(attr);
503 AttributeList &attr,
513 moveAttrFromListToList(attr, state.getCurrentAttrListRef(),
527 diagnoseBadTypeAttribute(state.getSema(), attr, type);
535 AttributeList &attr,
545 moveAttrFromListToList(attr, attrList, chunk.getAttrListRef());
549 return handleFunctionTypeAttr(state, attr, declSpecType);
556 AttributeList &attr,
563 if (attr.isCXX11Attribute()) {
564 moveAttrFromListToList(attr, state.getCurrentAttrListRef(),
570 if (distributeFunctionTypeAttrToInnermost(state, attr,
577 state.addIgnoredTypeAttr(attr);
584 AttributeList &attr,
589 if (distributeFunctionTypeAttrToInnermost(state, attr,
596 spliceAttrOutOfList(attr, declarator.getAttrListRef());
597 state.addIgnoredTypeAttr(attr);
605 /// int f ATTR;
606 /// int (f ATTR)();
608 /// int f() ATTR;
613 AttributeList *attr = state.getDeclarator().getAttributes();
616 next = attr->getNext();
620 if (attr->isCXX11Attribute())
623 switch (attr->getKind()) {
625 distributeObjCPointerTypeAttrFromDeclarator(state, *attr, declSpecType);
634 distributeFunctionTypeAttrFromDeclarator(state, *attr, declSpecType);
651 } while ((attr = next));
798 if (auto attr = qual.getAs<AttributedTypeLoc>()) {
799 rangeToRemove = attr.getLocalSourceRange();
800 if (attr.getTypePtr()->getImmediateNullability()) {
801 typeArg = attr.getTypePtr()->getModifiedType();
802 S.Diag(attr.getLocStart(),
2434 for (const AttributeList *attr = chunk.getAttrs(); attr;
2435 attr = attr->getNext())
2436 if (attr->getKind() == AttributeList::AT_ObjCOwnership)
2959 for (const AttributeList *Attr = D.getDeclSpec().getAttributes().getList();
2960 Attr; Attr = Attr->getNext()) {
2961 if (Attr->getKind() == AttributeList::AT_OpenCLKernel) {
3012 for (const AttributeList *attr = attrs; attr;
3013 attr = attr->getNext()) {
3014 if (attr->getKind() == AttributeList::AT_TypeNonNull ||
3015 attr->getKind() == AttributeList::AT_TypeNullable ||
3016 attr->getKind() == AttributeList::AT_TypeNullUnspecified)
3556 if (auto *attr = inferPointerNullability(
3561 attr->setUsedAsTypeAttr();
3837 for (const AttributeList *Attr = ReturnTypeChunk.getAttrs();
3838 Attr; Attr = Attr->getNext()) {
3839 if (Attr->getKind() == AttributeList::AT_ObjCOwnership) {
3840 AttrLoc = Attr->getLoc();
3846 for (const AttributeList *Attr
3848 Attr; Attr = Attr->getNext()) {
3849 if (Attr->getKind() == AttributeList::AT_ObjCOwnership) {
3850 AttrLoc = Attr->getLoc();
4333 for (const AttributeList *attr = chunk.getAttrs(); attr;
4334 attr = attr->getNext())
4335 if (attr->getKind() == AttributeList::AT_ObjCOwnership)
4355 AttributeList *attr = D.getAttributePool()
4359 spliceAttrIntoList(*attr, chunk.getAttrListRef());
4954 const AttributeList &Attr, Sema &S){
4960 S.Diag(Attr.getLoc(), diag::err_attribute_address_multiple_qualifiers);
4961 Attr.setInvalid();
4968 S.Diag(Attr.getLoc(), diag::err_attribute_address_function_type);
4969 Attr.setInvalid();
4974 if (Attr.getKind() == AttributeList::AT_AddressSpace) {
4976 if (Attr.getNumArgs() != 1) {
4977 S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments)
4978 << Attr.getName() << 1;
4979 Attr.setInvalid();
4982 Expr *ASArgExpr = static_cast<Expr *>(Attr.getArgAsExpr(0));
4986 S.Diag(Attr.getLoc(), diag::err_attribute_argument_type)
4987 << Attr.getName() << AANT_ArgumentIntegerConstant
4989 Attr.setInvalid();
4996 S.Diag(Attr.getLoc(), diag::err_attribute_address_space_negative)
4998 Attr.setInvalid();
5006 S.Diag(Attr.getLoc(), diag::err_attribute_address_space_too_high)
5008 Attr.setInvalid();
5014 switch (Attr.getKind()) {
5024 assert(Attr.getKind() == AttributeList::AT_OpenCLPrivateAddressSpace);
5041 if (const AttributedType *attr = dyn_cast<AttributedType>(type)) {
5042 if (attr->getAttrKind() == AttributedType::attr_objc_ownership)
5045 type = attr->getModifiedType();
5067 AttributeList &attr,
5095 SourceLocation AttrLoc = attr.getLoc();
5099 if (!attr.isArgIdent(0)) {
5101 << attr.getName() << AANT_ArgumentString;
5102 attr.setInvalid();
5106 IdentifierInfo *II = attr.getArgAsIdent(0)->Ident;
5118 << attr.getName() << II;
5119 attr.setInvalid();
5158 StringRef name = attr.getName()->getName();
5224 attr.setInvalid();
5251 AttributeList &attr,
5262 S.Diag(attr.getLoc(), diag::err_attribute_multiple_objc_gc);
5263 attr.setInvalid();
5268 if (!attr.isArgIdent(0)) {
5269 S.Diag(attr.getLoc(), diag::err_attribute_argument_type)
5270 << attr.getName() << AANT_ArgumentString;
5271 attr.setInvalid();
5275 if (attr.getNumArgs() > 1) {
5276 S.Diag(attr.getLoc(), diag::err_attribute_wrong_number_arguments)
5277 << attr.getName() << 1;
5278 attr.setInvalid();
5282 IdentifierInfo *II = attr.getArgAsIdent(0)->Ident;
5288 S.Diag(attr.getLoc(), diag::warn_attribute_type_not_supported)
5289 << attr.getName() << II;
5290 attr.setInvalid();
5298 if (attr.getLoc().isValid())
5436 AttributeList &Attr,
5440 AttributeList::Kind Kind = Attr.getKind();
5449 S.Diag(Attr.getLoc(), diag::warn_duplicate_attribute_exact)
5450 << Attr.getName();
5460 S.Diag(Attr.getLoc(), diag::err_attributes_are_not_compatible)
5467 S.Diag(Attr.getLoc(), diag::err_attributes_are_not_compatible)
5480 S.Diag(Attr.getLoc(), diag::err_attribute_no_member_pointers)
5481 << Attr.getName();
5483 S.Diag(Attr.getLoc(), diag::err_attribute_pointers_only)
5484 << Attr.getName() << 0;
5669 AttributeList &attr) {
5693 auto diag = state.getSema().Diag(attr.getLoc(),
5695 << DiagNullabilityKind(mapNullabilityAttrKind(attr.getKind()),
5696 attr.isContextSensitiveKeywordAttribute())
5702 diag << FixItHint::CreateRemoval(attr.getLoc())
5706 " " + attr.getName()->getName().str() + " ");
5709 moveAttrFromListToList(attr, state.getCurrentAttrListRef(),
5748 static AttributedType::Kind getCCTypeAttrKind(AttributeList &Attr) {
5749 assert(!Attr.isInvalid());
5750 switch (Attr.getKind()) {
5770 if (Attr.isArgExpr(0))
5771 Str = cast<StringLiteral>(Attr.getArgAsExpr(0))->getString();
5773 Str = Attr.getArgAsIdent(0)->Ident->getName();
5791 AttributeList &attr,
5797 if (attr.getKind() == AttributeList::AT_NoReturn) {
5798 if (S.CheckNoReturnAttr(attr))
5813 if (attr.getKind() == AttributeList::AT_NSReturnsRetained) {
5816 if (attr.getNumArgs()) return true;
5828 if (attr.getKind() == AttributeList::AT_Regparm) {
5830 if (S.CheckRegparmAttr(attr, value))
5841 S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible)
5844 attr.setInvalid();
5859 if (S.CheckCallingConvAttr(attr, CC))
5864 AttributedType::Kind CCAttrKind = getCCTypeAttrKind(attr);
5871 S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible)
5874 attr.setInvalid();
5889 S.Diag(attr.getLoc(), DiagID) << FunctionType::getNameForCallConv(CC);
5890 attr.setInvalid();
5897 S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible)
5899 attr.setInvalid();
5970 static void HandleVectorSizeAttr(QualType& CurType, const AttributeList &Attr,
5973 if (Attr.getNumArgs() != 1) {
5974 S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments)
5975 << Attr.getName() << 1;
5976 Attr.setInvalid();
5979 Expr *sizeExpr = static_cast<Expr *>(Attr.getArgAsExpr(0));
5983 S.Diag(Attr.getLoc(), diag::err_attribute_argument_type)
5984 << Attr.getName() << AANT_ArgumentIntegerConstant
5986 Attr.setInvalid();
5993 S.Diag(Attr.getLoc(), diag::err_attribute_invalid_vector_type) << CurType;
5994 Attr.setInvalid();
6003 S.Diag(Attr.getLoc(), diag::err_attribute_invalid_size)
6005 Attr.setInvalid();
6009 S.Diag(Attr.getLoc(), diag::err_attribute_size_too_large)
6011 Attr.setInvalid();
6015 S.Diag(Attr.getLoc(), diag::err_attribute_zero_size)
6017 Attr.setInvalid();
6030 const AttributeList &Attr,
6033 if (Attr.getNumArgs() != 1) {
6034 S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments)
6035 << Attr.getName() << 1;
6042 if (Attr.isArgIdent(0)) {
6046 id.setIdentifier(Attr.getArgAsIdent(0)->Ident, Attr.getLoc());
6055 sizeExpr = Attr.getArgAsExpr(0);
6059 QualType T = S.BuildExtVectorType(CurType, sizeExpr, Attr.getLoc());
6120 const AttributeList &Attr, Sema &S,
6124 S.Diag(Attr.getLoc(), diag::err_attribute_unsupported) << Attr.getName();
6125 Attr.setInvalid();
6129 if (Attr.getNumArgs() != 1) {
6130 S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments)
6131 << Attr.getName() << 1;
6132 Attr.setInvalid();
6136 Expr *numEltsExpr = static_cast<Expr *>(Attr.getArgAsExpr(0));
6140 S.Diag(Attr.getLoc(), diag::err_attribute_argument_type)
6141 << Attr.getName() << AANT_ArgumentIntegerConstant
6143 Attr.setInvalid();
6148 S.Diag(Attr.getLoc(), diag::err_attribute_invalid_vector_type) << CurType;
6149 Attr.setInvalid();
6158 S.Diag(Attr.getLoc(), diag::err_attribute_bad_neon_vector_size) << CurType;
6159 Attr.setInvalid();
6175 AttributeList &attr = *attrs;
6176 attrs = attr.getNext(); // reset to the next here due to early loop continue
6180 if (attr.isInvalid())
6183 if (attr.isCXX11Attribute()) {
6187 if (attr.getScopeName() && attr.getScopeName()->isStr("gnu")) {
6189 state.getSema().Diag(attr.getLoc(),
6191 << attr.getName();
6203 switch (attr.getKind()) {
6206 if (attr.isCXX11Attribute() && TAL == TAL_DeclChunk) {
6207 state.getSema().Diag(attr.getLoc(), diag::err_attribute_not_type_attr)
6208 << attr.getName();
6209 attr.setUsedAsTypeAttr();
6214 if (attr.isCXX11Attribute() && TAL == TAL_DeclChunk)
6215 state.getSema().Diag(attr.getLoc(),
6217 << attr.getName();
6226 attr.setUsedAsTypeAttr();
6234 HandleAddressSpaceTypeAttribute(type, attr, state.getSema());
6235 attr.setUsedAsTypeAttr();
6239 if (!handleObjCPointerTypeAttr(state, attr, type))
6240 distributeObjCPointerTypeAttr(state, attr, type);
6241 attr.setUsedAsTypeAttr();
6244 HandleVectorSizeAttr(type, attr, state.getSema());
6245 attr.setUsedAsTypeAttr();
6248 HandleExtVectorTypeAttr(type, attr, state.getSema());
6249 attr.setUsedAsTypeAttr();
6252 HandleNeonVectorTypeAttr(type, attr, state.getSema(),
6254 attr.setUsedAsTypeAttr();
6257 HandleNeonVectorTypeAttr(type, attr, state.getSema(),
6259 attr.setUsedAsTypeAttr();
6264 attr.setUsedAsTypeAttr();
6268 if (!handleMSPointerTypeQualifierAttr(state, attr, type))
6269 attr.setUsedAsTypeAttr();
6278 !distributeNullabilityTypeAttr(state, type, attr)) {
6281 mapNullabilityAttrKind(attr.getKind()),
6282 attr.getLoc(),
6283 attr.isContextSensitiveKeywordAttribute())) {
6284 attr.setInvalid();
6287 attr.setUsedAsTypeAttr();
6299 state.getSema().Diag(attr.getLoc(),
6301 << FixItHint::CreateRemoval(attr.getLoc())
6308 if (state.getSema().checkObjCKindOfType(type, attr.getLoc()))
6309 attr.setInvalid();
6310 attr.setUsedAsTypeAttr();
6319 attr.setUsedAsTypeAttr();
6324 distributeFunctionTypeAttrFromDeclSpec(state, attr, type);
6327 else if (!handleFunctionTypeAttr(state, attr, type))
6328 distributeFunctionTypeAttr(state, attr, type);