Lines Matching refs:Attr
175 static unsigned getNumAttributeArgs(const AttributeList &Attr) { in getNumAttributeArgs() argument
177 return Attr.getNumArgs() + Attr.hasParsedType(); in getNumAttributeArgs()
181 static bool checkAttributeNumArgsImpl(Sema &S, const AttributeList &Attr, in checkAttributeNumArgsImpl() argument
184 if (Comp(getNumAttributeArgs(Attr), Num)) { in checkAttributeNumArgsImpl()
185 S.Diag(Attr.getLoc(), Diag) << Attr.getName() << Num; in checkAttributeNumArgsImpl()
194 static bool checkAttributeNumArgs(Sema &S, const AttributeList &Attr, in checkAttributeNumArgs() argument
196 return checkAttributeNumArgsImpl(S, Attr, Num, in checkAttributeNumArgs()
203 static bool checkAttributeAtLeastNumArgs(Sema &S, const AttributeList &Attr, in checkAttributeAtLeastNumArgs() argument
205 return checkAttributeNumArgsImpl(S, Attr, Num, in checkAttributeAtLeastNumArgs()
212 static bool checkAttributeAtMostNumArgs(Sema &S, const AttributeList &Attr, in checkAttributeAtMostNumArgs() argument
214 return checkAttributeNumArgsImpl(S, Attr, Num, in checkAttributeAtMostNumArgs()
221 static bool checkUInt32Argument(Sema &S, const AttributeList &Attr, in checkUInt32Argument() argument
228 S.Diag(Attr.getLoc(), diag::err_attribute_argument_n_type) in checkUInt32Argument()
229 << Attr.getName() << Idx << AANT_ArgumentIntegerConstant in checkUInt32Argument()
232 S.Diag(Attr.getLoc(), diag::err_attribute_argument_type) in checkUInt32Argument()
233 << Attr.getName() << AANT_ArgumentIntegerConstant in checkUInt32Argument()
267 const AttributeList &Attr, in checkFunctionOrMethodParameterIndex() argument
284 S.Diag(Attr.getLoc(), diag::err_attribute_argument_n_type) in checkFunctionOrMethodParameterIndex()
285 << Attr.getName() << AttrArgNum << AANT_ArgumentIntegerConstant in checkFunctionOrMethodParameterIndex()
292 S.Diag(Attr.getLoc(), diag::err_attribute_argument_out_of_bounds) in checkFunctionOrMethodParameterIndex()
293 << Attr.getName() << AttrArgNum << IdxExpr->getSourceRange(); in checkFunctionOrMethodParameterIndex()
299 S.Diag(Attr.getLoc(), in checkFunctionOrMethodParameterIndex()
301 << Attr.getName() << IdxExpr->getSourceRange(); in checkFunctionOrMethodParameterIndex()
314 bool Sema::checkStringLiteralArgumentAttr(const AttributeList &Attr, in checkStringLiteralArgumentAttr() argument
318 if (Attr.isArgIdent(ArgNum)) { in checkStringLiteralArgumentAttr()
319 IdentifierLoc *Loc = Attr.getArgAsIdent(ArgNum); in checkStringLiteralArgumentAttr()
321 << Attr.getName() << AANT_ArgumentString in checkStringLiteralArgumentAttr()
331 Expr *ArgExpr = Attr.getArgAsExpr(ArgNum); in checkStringLiteralArgumentAttr()
338 << Attr.getName() << AANT_ArgumentString; in checkStringLiteralArgumentAttr()
350 const AttributeList &Attr) { in handleSimpleAttribute() argument
351 D->addAttr(::new (S.Context) AttrType(Attr.getRange(), S.Context, in handleSimpleAttribute()
352 Attr.getAttributeSpellingListIndex())); in handleSimpleAttribute()
357 const AttributeList &Attr) { in handleSimpleAttributeWithExclusions() argument
358 handleSimpleAttribute<AttrType>(S, D, Attr); in handleSimpleAttributeWithExclusions()
366 const AttributeList &Attr) { in handleSimpleAttributeWithExclusions() argument
367 if (checkAttrMutualExclusion<IncompatibleAttrType>(S, D, Attr.getRange(), in handleSimpleAttributeWithExclusions()
368 Attr.getName())) in handleSimpleAttributeWithExclusions()
371 Attr); in handleSimpleAttributeWithExclusions()
401 const AttributeList &Attr) { in threadSafetyCheckIsPointer() argument
418 S.Diag(Attr.getLoc(), diag::warn_thread_attribute_decl_not_pointer) in threadSafetyCheckIsPointer()
419 << Attr.getName() << QT; in threadSafetyCheckIsPointer()
522 const AttributeList &Attr, in checkAttrArgsAreCapabilityObjs() argument
526 for (unsigned Idx = Sidx; Idx < Attr.getNumArgs(); ++Idx) { in checkAttrArgsAreCapabilityObjs()
527 Expr *ArgExp = Attr.getArgAsExpr(Idx); in checkAttrArgsAreCapabilityObjs()
546 S.Diag(Attr.getLoc(), diag::warn_thread_attribute_ignored) << in checkAttrArgsAreCapabilityObjs()
547 Attr.getName(); in checkAttrArgsAreCapabilityObjs()
575 S.Diag(Attr.getLoc(), diag::err_attribute_argument_out_of_range) in checkAttrArgsAreCapabilityObjs()
576 << Attr.getName() << Idx + 1 << NumParams; in checkAttrArgsAreCapabilityObjs()
588 S.Diag(Attr.getLoc(), diag::warn_thread_attribute_argument_not_lockable) in checkAttrArgsAreCapabilityObjs()
589 << Attr.getName() << ArgTy; in checkAttrArgsAreCapabilityObjs()
600 const AttributeList &Attr) { in handlePtGuardedVarAttr() argument
601 if (!threadSafetyCheckIsPointer(S, D, Attr)) in handlePtGuardedVarAttr()
605 PtGuardedVarAttr(Attr.getRange(), S.Context, in handlePtGuardedVarAttr()
606 Attr.getAttributeSpellingListIndex())); in handlePtGuardedVarAttr()
610 const AttributeList &Attr, in checkGuardedByAttrCommon() argument
614 checkAttrArgsAreCapabilityObjs(S, D, Attr, Args); in checkGuardedByAttrCommon()
624 static void handleGuardedByAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleGuardedByAttr() argument
626 if (!checkGuardedByAttrCommon(S, D, Attr, Arg)) in handleGuardedByAttr()
629 D->addAttr(::new (S.Context) GuardedByAttr(Attr.getRange(), S.Context, Arg, in handleGuardedByAttr()
630 Attr.getAttributeSpellingListIndex())); in handleGuardedByAttr()
634 const AttributeList &Attr) { in handlePtGuardedByAttr() argument
636 if (!checkGuardedByAttrCommon(S, D, Attr, Arg)) in handlePtGuardedByAttr()
639 if (!threadSafetyCheckIsPointer(S, D, Attr)) in handlePtGuardedByAttr()
642 D->addAttr(::new (S.Context) PtGuardedByAttr(Attr.getRange(), in handlePtGuardedByAttr()
644 Attr.getAttributeSpellingListIndex())); in handlePtGuardedByAttr()
648 const AttributeList &Attr, in checkAcquireOrderAttrCommon() argument
650 if (!checkAttributeAtLeastNumArgs(S, Attr, 1)) in checkAcquireOrderAttrCommon()
656 S.Diag(Attr.getLoc(), diag::warn_thread_attribute_decl_not_lockable) in checkAcquireOrderAttrCommon()
657 << Attr.getName(); in checkAcquireOrderAttrCommon()
662 checkAttrArgsAreCapabilityObjs(S, D, Attr, Args); in checkAcquireOrderAttrCommon()
670 const AttributeList &Attr) { in handleAcquiredAfterAttr() argument
672 if (!checkAcquireOrderAttrCommon(S, D, Attr, Args)) in handleAcquiredAfterAttr()
677 AcquiredAfterAttr(Attr.getRange(), S.Context, in handleAcquiredAfterAttr()
679 Attr.getAttributeSpellingListIndex())); in handleAcquiredAfterAttr()
683 const AttributeList &Attr) { in handleAcquiredBeforeAttr() argument
685 if (!checkAcquireOrderAttrCommon(S, D, Attr, Args)) in handleAcquiredBeforeAttr()
690 AcquiredBeforeAttr(Attr.getRange(), S.Context, in handleAcquiredBeforeAttr()
692 Attr.getAttributeSpellingListIndex())); in handleAcquiredBeforeAttr()
696 const AttributeList &Attr, in checkLockFunAttrCommon() argument
700 checkAttrArgsAreCapabilityObjs(S, D, Attr, Args, 0, /*ParamIdxOk=*/true); in checkLockFunAttrCommon()
706 const AttributeList &Attr) { in handleAssertSharedLockAttr() argument
708 if (!checkLockFunAttrCommon(S, D, Attr, Args)) in handleAssertSharedLockAttr()
714 AssertSharedLockAttr(Attr.getRange(), S.Context, StartArg, Size, in handleAssertSharedLockAttr()
715 Attr.getAttributeSpellingListIndex())); in handleAssertSharedLockAttr()
719 const AttributeList &Attr) { in handleAssertExclusiveLockAttr() argument
721 if (!checkLockFunAttrCommon(S, D, Attr, Args)) in handleAssertExclusiveLockAttr()
727 AssertExclusiveLockAttr(Attr.getRange(), S.Context, in handleAssertExclusiveLockAttr()
729 Attr.getAttributeSpellingListIndex())); in handleAssertExclusiveLockAttr()
734 const AttributeList &Attr, in checkTryLockFunAttrCommon() argument
736 if (!checkAttributeAtLeastNumArgs(S, Attr, 1)) in checkTryLockFunAttrCommon()
739 if (!isIntOrBool(Attr.getArgAsExpr(0))) { in checkTryLockFunAttrCommon()
740 S.Diag(Attr.getLoc(), diag::err_attribute_argument_n_type) in checkTryLockFunAttrCommon()
741 << Attr.getName() << 1 << AANT_ArgumentIntOrBool; in checkTryLockFunAttrCommon()
746 checkAttrArgsAreCapabilityObjs(S, D, Attr, Args, 1); in checkTryLockFunAttrCommon()
752 const AttributeList &Attr) { in handleSharedTrylockFunctionAttr() argument
754 if (!checkTryLockFunAttrCommon(S, D, Attr, Args)) in handleSharedTrylockFunctionAttr()
758 SharedTrylockFunctionAttr(Attr.getRange(), S.Context, in handleSharedTrylockFunctionAttr()
759 Attr.getArgAsExpr(0), in handleSharedTrylockFunctionAttr()
761 Attr.getAttributeSpellingListIndex())); in handleSharedTrylockFunctionAttr()
765 const AttributeList &Attr) { in handleExclusiveTrylockFunctionAttr() argument
767 if (!checkTryLockFunAttrCommon(S, D, Attr, Args)) in handleExclusiveTrylockFunctionAttr()
771 Attr.getRange(), S.Context, Attr.getArgAsExpr(0), Args.data(), in handleExclusiveTrylockFunctionAttr()
772 Args.size(), Attr.getAttributeSpellingListIndex())); in handleExclusiveTrylockFunctionAttr()
776 const AttributeList &Attr) { in handleLockReturnedAttr() argument
779 checkAttrArgsAreCapabilityObjs(S, D, Attr, Args); in handleLockReturnedAttr()
785 LockReturnedAttr(Attr.getRange(), S.Context, Args[0], in handleLockReturnedAttr()
786 Attr.getAttributeSpellingListIndex())); in handleLockReturnedAttr()
790 const AttributeList &Attr) { in handleLocksExcludedAttr() argument
791 if (!checkAttributeAtLeastNumArgs(S, Attr, 1)) in handleLocksExcludedAttr()
796 checkAttrArgsAreCapabilityObjs(S, D, Attr, Args); in handleLocksExcludedAttr()
803 LocksExcludedAttr(Attr.getRange(), S.Context, StartArg, Size, in handleLocksExcludedAttr()
804 Attr.getAttributeSpellingListIndex())); in handleLocksExcludedAttr()
807 static void handleEnableIfAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleEnableIfAttr() argument
808 S.Diag(Attr.getLoc(), diag::ext_clang_enable_if); in handleEnableIfAttr()
810 Expr *Cond = Attr.getArgAsExpr(0); in handleEnableIfAttr()
819 if (!S.checkStringLiteralArgumentAttr(Attr, 1, Msg)) in handleEnableIfAttr()
826 S.Diag(Attr.getLoc(), diag::err_enable_if_never_constant_expr); in handleEnableIfAttr()
833 EnableIfAttr(Attr.getRange(), S.Context, Cond, Msg, in handleEnableIfAttr()
834 Attr.getAttributeSpellingListIndex())); in handleEnableIfAttr()
838 const AttributeList &Attr) { in handlePassObjectSizeAttr() argument
841 << Attr.getName(); in handlePassObjectSizeAttr()
845 Expr *E = Attr.getArgAsExpr(0); in handlePassObjectSizeAttr()
847 if (!checkUInt32Argument(S, Attr, E, Type, /*Idx=*/1)) in handlePassObjectSizeAttr()
855 << Attr.getName() << 0 << 3 << E->getSourceRange(); in handlePassObjectSizeAttr()
865 << Attr.getName() << 1; in handlePassObjectSizeAttr()
870 PassObjectSizeAttr(Attr.getRange(), S.Context, (int)Type, in handlePassObjectSizeAttr()
871 Attr.getAttributeSpellingListIndex())); in handlePassObjectSizeAttr()
874 static void handleConsumableAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleConsumableAttr() argument
877 if (Attr.isArgIdent(0)) { in handleConsumableAttr()
878 IdentifierLoc *IL = Attr.getArgAsIdent(0); in handleConsumableAttr()
882 << Attr.getName() << IL->Ident; in handleConsumableAttr()
886 S.Diag(Attr.getLoc(), diag::err_attribute_argument_type) in handleConsumableAttr()
887 << Attr.getName() << AANT_ArgumentIdentifier; in handleConsumableAttr()
892 ConsumableAttr(Attr.getRange(), S.Context, DefaultState, in handleConsumableAttr()
893 Attr.getAttributeSpellingListIndex())); in handleConsumableAttr()
897 const AttributeList &Attr) { in checkForConsumableClass() argument
903 S.Diag(Attr.getLoc(), diag::warn_attr_on_unconsumable_class) << in checkForConsumableClass()
914 const AttributeList &Attr) { in handleCallableWhenAttr() argument
915 if (!checkAttributeAtLeastNumArgs(S, Attr, 1)) in handleCallableWhenAttr()
918 if (!checkForConsumableClass(S, cast<CXXMethodDecl>(D), Attr)) in handleCallableWhenAttr()
922 for (unsigned ArgIndex = 0; ArgIndex < Attr.getNumArgs(); ++ArgIndex) { in handleCallableWhenAttr()
927 if (Attr.isArgIdent(ArgIndex)) { in handleCallableWhenAttr()
928 IdentifierLoc *Ident = Attr.getArgAsIdent(ArgIndex); in handleCallableWhenAttr()
932 if (!S.checkStringLiteralArgumentAttr(Attr, ArgIndex, StateString, &Loc)) in handleCallableWhenAttr()
939 << Attr.getName() << StateString; in handleCallableWhenAttr()
947 CallableWhenAttr(Attr.getRange(), S.Context, States.data(), in handleCallableWhenAttr()
948 States.size(), Attr.getAttributeSpellingListIndex())); in handleCallableWhenAttr()
952 const AttributeList &Attr) { in handleParamTypestateAttr() argument
955 if (Attr.isArgIdent(0)) { in handleParamTypestateAttr()
956 IdentifierLoc *Ident = Attr.getArgAsIdent(0); in handleParamTypestateAttr()
962 << Attr.getName() << StateString; in handleParamTypestateAttr()
966 S.Diag(Attr.getLoc(), diag::err_attribute_argument_type) << in handleParamTypestateAttr()
967 Attr.getName() << AANT_ArgumentIdentifier; in handleParamTypestateAttr()
984 ParamTypestateAttr(Attr.getRange(), S.Context, ParamState, in handleParamTypestateAttr()
985 Attr.getAttributeSpellingListIndex())); in handleParamTypestateAttr()
989 const AttributeList &Attr) { in handleReturnTypestateAttr() argument
992 if (Attr.isArgIdent(0)) { in handleReturnTypestateAttr()
993 IdentifierLoc *IL = Attr.getArgAsIdent(0); in handleReturnTypestateAttr()
997 << Attr.getName() << IL->Ident; in handleReturnTypestateAttr()
1001 S.Diag(Attr.getLoc(), diag::err_attribute_argument_type) << in handleReturnTypestateAttr()
1002 Attr.getName() << AANT_ArgumentIdentifier; in handleReturnTypestateAttr()
1032 ReturnTypestateAttr(Attr.getRange(), S.Context, ReturnState, in handleReturnTypestateAttr()
1033 Attr.getAttributeSpellingListIndex())); in handleReturnTypestateAttr()
1036 static void handleSetTypestateAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleSetTypestateAttr() argument
1037 if (!checkForConsumableClass(S, cast<CXXMethodDecl>(D), Attr)) in handleSetTypestateAttr()
1041 if (Attr.isArgIdent(0)) { in handleSetTypestateAttr()
1042 IdentifierLoc *Ident = Attr.getArgAsIdent(0); in handleSetTypestateAttr()
1046 << Attr.getName() << Param; in handleSetTypestateAttr()
1050 S.Diag(Attr.getLoc(), diag::err_attribute_argument_type) << in handleSetTypestateAttr()
1051 Attr.getName() << AANT_ArgumentIdentifier; in handleSetTypestateAttr()
1056 SetTypestateAttr(Attr.getRange(), S.Context, NewState, in handleSetTypestateAttr()
1057 Attr.getAttributeSpellingListIndex())); in handleSetTypestateAttr()
1061 const AttributeList &Attr) { in handleTestTypestateAttr() argument
1062 if (!checkForConsumableClass(S, cast<CXXMethodDecl>(D), Attr)) in handleTestTypestateAttr()
1066 if (Attr.isArgIdent(0)) { in handleTestTypestateAttr()
1067 IdentifierLoc *Ident = Attr.getArgAsIdent(0); in handleTestTypestateAttr()
1071 << Attr.getName() << Param; in handleTestTypestateAttr()
1075 S.Diag(Attr.getLoc(), diag::err_attribute_argument_type) << in handleTestTypestateAttr()
1076 Attr.getName() << AANT_ArgumentIdentifier; in handleTestTypestateAttr()
1081 TestTypestateAttr(Attr.getRange(), S.Context, TestState, in handleTestTypestateAttr()
1082 Attr.getAttributeSpellingListIndex())); in handleTestTypestateAttr()
1086 const AttributeList &Attr) { in handleExtVectorTypeAttr() argument
1091 static void handlePackedAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handlePackedAttr() argument
1093 TD->addAttr(::new (S.Context) PackedAttr(Attr.getRange(), S.Context, in handlePackedAttr()
1094 Attr.getAttributeSpellingListIndex())); in handlePackedAttr()
1100 S.Diag(Attr.getLoc(), diag::warn_attribute_packed_for_bitfield); in handlePackedAttr()
1103 Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex())); in handlePackedAttr()
1105 S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName(); in handlePackedAttr()
1108 static bool checkIBOutletCommon(Sema &S, Decl *D, const AttributeList &Attr) { in checkIBOutletCommon() argument
1114 S.Diag(Attr.getLoc(), diag::warn_iboutlet_object_type) in checkIBOutletCommon()
1115 << Attr.getName() << VD->getType() << 0; in checkIBOutletCommon()
1121 S.Diag(Attr.getLoc(), diag::warn_iboutlet_object_type) in checkIBOutletCommon()
1122 << Attr.getName() << PD->getType() << 1; in checkIBOutletCommon()
1127 S.Diag(Attr.getLoc(), diag::warn_attribute_iboutlet) << Attr.getName(); in checkIBOutletCommon()
1134 static void handleIBOutlet(Sema &S, Decl *D, const AttributeList &Attr) { in handleIBOutlet() argument
1135 if (!checkIBOutletCommon(S, D, Attr)) in handleIBOutlet()
1139 IBOutletAttr(Attr.getRange(), S.Context, in handleIBOutlet()
1140 Attr.getAttributeSpellingListIndex())); in handleIBOutlet()
1144 const AttributeList &Attr) { in handleIBOutletCollection() argument
1147 if (Attr.getNumArgs() > 1) { in handleIBOutletCollection()
1148 S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) in handleIBOutletCollection()
1149 << Attr.getName() << 1; in handleIBOutletCollection()
1153 if (!checkIBOutletCommon(S, D, Attr)) in handleIBOutletCollection()
1158 if (Attr.hasParsedType()) in handleIBOutletCollection()
1159 PT = Attr.getTypeArg(); in handleIBOutletCollection()
1161 PT = S.getTypeName(S.Context.Idents.get("NSObject"), Attr.getLoc(), in handleIBOutletCollection()
1164 S.Diag(Attr.getLoc(), diag::err_iboutletcollection_type) << "NSObject"; in handleIBOutletCollection()
1172 QTLoc = S.Context.getTrivialTypeSourceInfo(QT, Attr.getLoc()); in handleIBOutletCollection()
1179 S.Diag(Attr.getLoc(), in handleIBOutletCollection()
1186 IBOutletCollectionAttr(Attr.getRange(), S.Context, QTLoc, in handleIBOutletCollection()
1187 Attr.getAttributeSpellingListIndex())); in handleIBOutletCollection()
1214 static bool attrNonNullArgCheck(Sema &S, QualType T, const AttributeList &Attr, in attrNonNullArgCheck() argument
1220 S.Diag(Attr.getLoc(), diag::warn_attribute_return_pointers_only) in attrNonNullArgCheck()
1221 << Attr.getName() << AttrParmRange << TypeRange; in attrNonNullArgCheck()
1223 S.Diag(Attr.getLoc(), diag::warn_attribute_pointers_only) in attrNonNullArgCheck()
1224 << Attr.getName() << AttrParmRange << TypeRange << 0; in attrNonNullArgCheck()
1230 static void handleNonNullAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleNonNullAttr() argument
1232 for (unsigned I = 0; I < Attr.getNumArgs(); ++I) { in handleNonNullAttr()
1233 Expr *Ex = Attr.getArgAsExpr(I); in handleNonNullAttr()
1235 if (!checkFunctionOrMethodParameterIndex(S, D, Attr, I + 1, Ex, Idx)) in handleNonNullAttr()
1240 !attrNonNullArgCheck(S, getFunctionOrMethodParamType(D, Idx), Attr, in handleNonNullAttr()
1252 if (NonNullArgs.empty() && Attr.getLoc().isFileID() && in handleNonNullAttr()
1263 S.Diag(Attr.getLoc(), diag::warn_attribute_nonnull_no_pointers); in handleNonNullAttr()
1270 NonNullAttr(Attr.getRange(), S.Context, Start, Size, in handleNonNullAttr()
1271 Attr.getAttributeSpellingListIndex())); in handleNonNullAttr()
1275 const AttributeList &Attr) { in handleNonNullAttrParameter() argument
1276 if (Attr.getNumArgs() > 0) { in handleNonNullAttrParameter()
1278 handleNonNullAttr(S, D, Attr); in handleNonNullAttrParameter()
1280 S.Diag(Attr.getLoc(), diag::warn_attribute_nonnull_parm_no_args) in handleNonNullAttrParameter()
1287 if (!attrNonNullArgCheck(S, D->getType(), Attr, SourceRange(), in handleNonNullAttrParameter()
1292 NonNullAttr(Attr.getRange(), S.Context, nullptr, 0, in handleNonNullAttrParameter()
1293 Attr.getAttributeSpellingListIndex())); in handleNonNullAttrParameter()
1297 const AttributeList &Attr) { in handleReturnsNonNullAttr() argument
1300 if (!attrNonNullArgCheck(S, ResultType, Attr, SourceRange(), SR, in handleReturnsNonNullAttr()
1305 ReturnsNonNullAttr(Attr.getRange(), S.Context, in handleReturnsNonNullAttr()
1306 Attr.getAttributeSpellingListIndex())); in handleReturnsNonNullAttr()
1310 const AttributeList &Attr) { in handleAssumeAlignedAttr() argument
1311 Expr *E = Attr.getArgAsExpr(0), in handleAssumeAlignedAttr()
1312 *OE = Attr.getNumArgs() > 1 ? Attr.getArgAsExpr(1) : nullptr; in handleAssumeAlignedAttr()
1313 S.AddAssumeAlignedAttr(Attr.getRange(), D, E, OE, in handleAssumeAlignedAttr()
1314 Attr.getAttributeSpellingListIndex()); in handleAssumeAlignedAttr()
1488 static void handleWeakRefAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleWeakRefAttr() argument
1490 if (Attr.getNumArgs() > 1) { in handleWeakRefAttr()
1491 S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) in handleWeakRefAttr()
1492 << Attr.getName() << 1; in handleWeakRefAttr()
1510 S.Diag(Attr.getLoc(), diag::err_attribute_weakref_not_global_context) in handleWeakRefAttr()
1541 if (Attr.getNumArgs() && S.checkStringLiteralArgumentAttr(Attr, 0, Str)) in handleWeakRefAttr()
1544 D->addAttr(::new (S.Context) AliasAttr(Attr.getRange(), S.Context, Str, in handleWeakRefAttr()
1545 Attr.getAttributeSpellingListIndex())); in handleWeakRefAttr()
1548 WeakRefAttr(Attr.getRange(), S.Context, in handleWeakRefAttr()
1549 Attr.getAttributeSpellingListIndex())); in handleWeakRefAttr()
1552 static void handleIFuncAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleIFuncAttr() argument
1554 if (!S.checkStringLiteralArgumentAttr(Attr, 0, Str)) in handleIFuncAttr()
1560 S.Diag(Attr.getLoc(), diag::err_alias_is_definition) << FD << 1; in handleIFuncAttr()
1566 S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName(); in handleIFuncAttr()
1570 D->addAttr(::new (S.Context) IFuncAttr(Attr.getRange(), S.Context, Str, in handleIFuncAttr()
1571 Attr.getAttributeSpellingListIndex())); in handleIFuncAttr()
1574 static void handleAliasAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleAliasAttr() argument
1576 if (!S.checkStringLiteralArgumentAttr(Attr, 0, Str)) in handleAliasAttr()
1580 S.Diag(Attr.getLoc(), diag::err_alias_not_supported_on_darwin); in handleAliasAttr()
1584 S.Diag(Attr.getLoc(), diag::err_alias_not_supported_on_nvptx); in handleAliasAttr()
1590 S.Diag(Attr.getLoc(), diag::err_alias_is_definition) << FD << 0; in handleAliasAttr()
1596 S.Diag(Attr.getLoc(), diag::err_alias_is_definition) << VD << 0; in handleAliasAttr()
1603 D->addAttr(::new (S.Context) AliasAttr(Attr.getRange(), S.Context, Str, in handleAliasAttr()
1604 Attr.getAttributeSpellingListIndex())); in handleAliasAttr()
1607 static void handleColdAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleColdAttr() argument
1608 if (checkAttrMutualExclusion<HotAttr>(S, D, Attr.getRange(), Attr.getName())) in handleColdAttr()
1611 D->addAttr(::new (S.Context) ColdAttr(Attr.getRange(), S.Context, in handleColdAttr()
1612 Attr.getAttributeSpellingListIndex())); in handleColdAttr()
1615 static void handleHotAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleHotAttr() argument
1616 if (checkAttrMutualExclusion<ColdAttr>(S, D, Attr.getRange(), Attr.getName())) in handleHotAttr()
1619 D->addAttr(::new (S.Context) HotAttr(Attr.getRange(), S.Context, in handleHotAttr()
1620 Attr.getAttributeSpellingListIndex())); in handleHotAttr()
1624 const AttributeList &Attr) { in handleTLSModelAttr() argument
1628 if (!S.checkStringLiteralArgumentAttr(Attr, 0, Model, &LiteralLoc)) in handleTLSModelAttr()
1639 TLSModelAttr(Attr.getRange(), S.Context, Model, in handleTLSModelAttr()
1640 Attr.getAttributeSpellingListIndex())); in handleTLSModelAttr()
1643 static void handleRestrictAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleRestrictAttr() argument
1647 Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex())); in handleRestrictAttr()
1651 S.Diag(Attr.getLoc(), diag::warn_attribute_return_pointers_only) in handleRestrictAttr()
1652 << Attr.getName() << getFunctionOrMethodResultSourceRange(D); in handleRestrictAttr()
1655 static void handleCommonAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleCommonAttr() argument
1657 S.Diag(Attr.getLoc(), diag::err_attribute_not_supported_in_lang) in handleCommonAttr()
1658 << Attr.getName() << AttributeLangSupport::Cpp; in handleCommonAttr()
1662 if (CommonAttr *CA = S.mergeCommonAttr(D, Attr.getRange(), Attr.getName(), in handleCommonAttr()
1663 Attr.getAttributeSpellingListIndex())) in handleCommonAttr()
1667 static void handleNakedAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleNakedAttr() argument
1668 if (checkAttrMutualExclusion<DisableTailCallsAttr>(S, D, Attr.getRange(), in handleNakedAttr()
1669 Attr.getName())) in handleNakedAttr()
1672 D->addAttr(::new (S.Context) NakedAttr(Attr.getRange(), S.Context, in handleNakedAttr()
1673 Attr.getAttributeSpellingListIndex())); in handleNakedAttr()
1702 const AttributeList &Attr) { in handleAnalyzerNoReturnAttr() argument
1710 S.Diag(Attr.getLoc(), in handleAnalyzerNoReturnAttr()
1711 Attr.isCXX11Attribute() ? diag::err_attribute_wrong_decl_type in handleAnalyzerNoReturnAttr()
1713 << Attr.getName() << ExpectedFunctionMethodOrBlock; in handleAnalyzerNoReturnAttr()
1719 AnalyzerNoReturnAttr(Attr.getRange(), S.Context, in handleAnalyzerNoReturnAttr()
1720 Attr.getAttributeSpellingListIndex())); in handleAnalyzerNoReturnAttr()
1724 static void handleVecReturnAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleVecReturnAttr() argument
1749 S.Diag(Attr.getLoc(), diag::err_repeat_attribute) << A; in handleVecReturnAttr()
1757 S.Diag(Attr.getLoc(), diag::err_attribute_vecreturn_only_vector_member); in handleVecReturnAttr()
1762 S.Diag(Attr.getLoc(), diag::err_attribute_vecreturn_only_pod_record); in handleVecReturnAttr()
1768 S.Diag(Attr.getLoc(), diag::err_attribute_vecreturn_only_vector_member); in handleVecReturnAttr()
1775 VecReturnAttr(Attr.getRange(), S.Context, in handleVecReturnAttr()
1776 Attr.getAttributeSpellingListIndex())); in handleVecReturnAttr()
1780 const AttributeList &Attr) { in handleDependencyAttr() argument
1785 S.Diag(Attr.getLoc(), in handleDependencyAttr()
1792 Attr.getRange(), S.Context, in handleDependencyAttr()
1793 Attr.getAttributeSpellingListIndex())); in handleDependencyAttr()
1797 const AttributeList &Attr) { in handleNotTailCalledAttr() argument
1798 if (checkAttrMutualExclusion<AlwaysInlineAttr>(S, D, Attr.getRange(), in handleNotTailCalledAttr()
1799 Attr.getName())) in handleNotTailCalledAttr()
1803 Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex())); in handleNotTailCalledAttr()
1807 const AttributeList &Attr) { in handleDisableTailCallsAttr() argument
1808 if (checkAttrMutualExclusion<NakedAttr>(S, D, Attr.getRange(), in handleDisableTailCallsAttr()
1809 Attr.getName())) in handleDisableTailCallsAttr()
1813 Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex())); in handleDisableTailCallsAttr()
1816 static void handleUsedAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleUsedAttr() argument
1819 S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName(); in handleUsedAttr()
1823 S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) in handleUsedAttr()
1824 << Attr.getName() << ExpectedVariableOrFunction; in handleUsedAttr()
1829 UsedAttr(Attr.getRange(), S.Context, in handleUsedAttr()
1830 Attr.getAttributeSpellingListIndex())); in handleUsedAttr()
1833 static void handleUnusedAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleUnusedAttr() argument
1834 bool IsCXX1zAttr = Attr.isCXX11Attribute() && !Attr.getScopeName(); in handleUnusedAttr()
1840 S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) in handleUnusedAttr()
1841 << Attr.getName() << ExpectedForMaybeUnused; in handleUnusedAttr()
1849 S.Diag(Attr.getLoc(), diag::ext_cxx1z_attr) << Attr.getName(); in handleUnusedAttr()
1852 Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex())); in handleUnusedAttr()
1855 static void handleConstructorAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleConstructorAttr() argument
1857 if (Attr.getNumArgs() && in handleConstructorAttr()
1858 !checkUInt32Argument(S, Attr, Attr.getArgAsExpr(0), priority)) in handleConstructorAttr()
1862 ConstructorAttr(Attr.getRange(), S.Context, priority, in handleConstructorAttr()
1863 Attr.getAttributeSpellingListIndex())); in handleConstructorAttr()
1866 static void handleDestructorAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleDestructorAttr() argument
1868 if (Attr.getNumArgs() && in handleDestructorAttr()
1869 !checkUInt32Argument(S, Attr, Attr.getArgAsExpr(0), priority)) in handleDestructorAttr()
1873 DestructorAttr(Attr.getRange(), S.Context, priority, in handleDestructorAttr()
1874 Attr.getAttributeSpellingListIndex())); in handleDestructorAttr()
1879 const AttributeList &Attr) { in handleAttrWithMessage() argument
1882 if (Attr.getNumArgs() == 1 && !S.checkStringLiteralArgumentAttr(Attr, 0, Str)) in handleAttrWithMessage()
1885 D->addAttr(::new (S.Context) AttrTy(Attr.getRange(), S.Context, Str, in handleAttrWithMessage()
1886 Attr.getAttributeSpellingListIndex())); in handleAttrWithMessage()
1890 const AttributeList &Attr) { in handleObjCSuppresProtocolAttr() argument
1892 S.Diag(Attr.getLoc(), diag::err_objc_attr_protocol_requires_definition) in handleObjCSuppresProtocolAttr()
1893 << Attr.getName() << Attr.getRange(); in handleObjCSuppresProtocolAttr()
1898 ObjCExplicitProtocolImplAttr(Attr.getRange(), S.Context, in handleObjCSuppresProtocolAttr()
1899 Attr.getAttributeSpellingListIndex())); in handleObjCSuppresProtocolAttr()
2124 const AttributeList &Attr) { in handleAvailabilityAttr() argument
2125 if (!checkAttributeNumArgs(S, Attr, 1)) in handleAvailabilityAttr()
2127 IdentifierLoc *Platform = Attr.getArgAsIdent(0); in handleAvailabilityAttr()
2128 unsigned Index = Attr.getAttributeSpellingListIndex(); in handleAvailabilityAttr()
2137 S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName(); in handleAvailabilityAttr()
2141 AvailabilityChange Introduced = Attr.getAvailabilityIntroduced(); in handleAvailabilityAttr()
2142 AvailabilityChange Deprecated = Attr.getAvailabilityDeprecated(); in handleAvailabilityAttr()
2143 AvailabilityChange Obsoleted = Attr.getAvailabilityObsoleted(); in handleAvailabilityAttr()
2144 bool IsUnavailable = Attr.getUnavailableLoc().isValid(); in handleAvailabilityAttr()
2145 bool IsStrict = Attr.getStrictLoc().isValid(); in handleAvailabilityAttr()
2148 dyn_cast_or_null<StringLiteral>(Attr.getMessageExpr())) in handleAvailabilityAttr()
2152 dyn_cast_or_null<StringLiteral>(Attr.getReplacementExpr())) in handleAvailabilityAttr()
2155 AvailabilityAttr *NewAttr = S.mergeAvailabilityAttr(ND, Attr.getRange(), II, in handleAvailabilityAttr()
2200 Attr.getRange(), in handleAvailabilityAttr()
2225 Attr.getRange(), in handleAvailabilityAttr()
2272 static void handleVisibilityAttr(Sema &S, Decl *D, const AttributeList &Attr, in handleVisibilityAttr() argument
2276 S.Diag(Attr.getRange().getBegin(), diag::warn_attribute_ignored) in handleVisibilityAttr()
2277 << Attr.getName(); in handleVisibilityAttr()
2286 S.Diag(Attr.getRange().getBegin(), diag::err_attribute_wrong_decl_type) in handleVisibilityAttr()
2287 << Attr.getName() << ExpectedTypeOrNamespace; in handleVisibilityAttr()
2294 if (!S.checkStringLiteralArgumentAttr(Attr, 0, TypeStr, &LiteralLoc)) in handleVisibilityAttr()
2300 << Attr.getName() << TypeStr; in handleVisibilityAttr()
2308 S.Diag(Attr.getLoc(), diag::warn_attribute_protected_visibility); in handleVisibilityAttr()
2312 unsigned Index = Attr.getAttributeSpellingListIndex(); in handleVisibilityAttr()
2313 clang::Attr *newAttr; in handleVisibilityAttr()
2315 newAttr = S.mergeTypeVisibilityAttr(D, Attr.getRange(), in handleVisibilityAttr()
2319 newAttr = S.mergeVisibilityAttr(D, Attr.getRange(), type, Index); in handleVisibilityAttr()
2326 const AttributeList &Attr) { in handleObjCMethodFamilyAttr() argument
2328 if (!Attr.isArgIdent(0)) { in handleObjCMethodFamilyAttr()
2329 S.Diag(Attr.getLoc(), diag::err_attribute_argument_n_type) in handleObjCMethodFamilyAttr()
2330 << Attr.getName() << 1 << AANT_ArgumentIdentifier; in handleObjCMethodFamilyAttr()
2334 IdentifierLoc *IL = Attr.getArgAsIdent(0); in handleObjCMethodFamilyAttr()
2337 S.Diag(IL->Loc, diag::warn_attribute_type_not_supported) << Attr.getName() in handleObjCMethodFamilyAttr()
2350 method->addAttr(new (S.Context) ObjCMethodFamilyAttr(Attr.getRange(), in handleObjCMethodFamilyAttr()
2352 Attr.getAttributeSpellingListIndex())); in handleObjCMethodFamilyAttr()
2355 static void handleObjCNSObject(Sema &S, Decl *D, const AttributeList &Attr) { in handleObjCNSObject() argument
2380 ObjCNSObjectAttr(Attr.getRange(), S.Context, in handleObjCNSObject()
2381 Attr.getAttributeSpellingListIndex())); in handleObjCNSObject()
2384 static void handleObjCIndependentClass(Sema &S, Decl *D, const AttributeList &Attr) { in handleObjCIndependentClass() argument
2396 ObjCIndependentClassAttr(Attr.getRange(), S.Context, in handleObjCIndependentClass()
2397 Attr.getAttributeSpellingListIndex())); in handleObjCIndependentClass()
2400 static void handleBlocksAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleBlocksAttr() argument
2401 if (!Attr.isArgIdent(0)) { in handleBlocksAttr()
2402 S.Diag(Attr.getLoc(), diag::err_attribute_argument_n_type) in handleBlocksAttr()
2403 << Attr.getName() << 1 << AANT_ArgumentIdentifier; in handleBlocksAttr()
2407 IdentifierInfo *II = Attr.getArgAsIdent(0)->Ident; in handleBlocksAttr()
2410 S.Diag(Attr.getLoc(), diag::warn_attribute_type_not_supported) in handleBlocksAttr()
2411 << Attr.getName() << II; in handleBlocksAttr()
2416 BlocksAttr(Attr.getRange(), S.Context, type, in handleBlocksAttr()
2417 Attr.getAttributeSpellingListIndex())); in handleBlocksAttr()
2420 static void handleSentinelAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleSentinelAttr() argument
2422 if (Attr.getNumArgs() > 0) { in handleSentinelAttr()
2423 Expr *E = Attr.getArgAsExpr(0); in handleSentinelAttr()
2427 S.Diag(Attr.getLoc(), diag::err_attribute_argument_n_type) in handleSentinelAttr()
2428 << Attr.getName() << 1 << AANT_ArgumentIntegerConstant in handleSentinelAttr()
2434 S.Diag(Attr.getLoc(), diag::err_attribute_sentinel_less_than_zero) in handleSentinelAttr()
2443 if (Attr.getNumArgs() > 1) { in handleSentinelAttr()
2444 Expr *E = Attr.getArgAsExpr(1); in handleSentinelAttr()
2448 S.Diag(Attr.getLoc(), diag::err_attribute_argument_n_type) in handleSentinelAttr()
2449 << Attr.getName() << 2 << AANT_ArgumentIntegerConstant in handleSentinelAttr()
2458 S.Diag(Attr.getLoc(), diag::err_attribute_sentinel_not_zero_or_one) in handleSentinelAttr()
2467 S.Diag(Attr.getLoc(), diag::warn_attribute_sentinel_named_arguments); in handleSentinelAttr()
2472 S.Diag(Attr.getLoc(), diag::warn_attribute_sentinel_not_variadic) << 0; in handleSentinelAttr()
2477 S.Diag(Attr.getLoc(), diag::warn_attribute_sentinel_not_variadic) << 0; in handleSentinelAttr()
2482 S.Diag(Attr.getLoc(), diag::warn_attribute_sentinel_not_variadic) << 1; in handleSentinelAttr()
2493 S.Diag(Attr.getLoc(), diag::warn_attribute_sentinel_not_variadic) << m; in handleSentinelAttr()
2497 S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) in handleSentinelAttr()
2498 << Attr.getName() << ExpectedFunctionMethodOrBlock; in handleSentinelAttr()
2502 S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) in handleSentinelAttr()
2503 << Attr.getName() << ExpectedFunctionMethodOrBlock; in handleSentinelAttr()
2507 SentinelAttr(Attr.getRange(), S.Context, sentinel, nullPos, in handleSentinelAttr()
2508 Attr.getAttributeSpellingListIndex())); in handleSentinelAttr()
2511 static void handleWarnUnusedResult(Sema &S, Decl *D, const AttributeList &Attr) { in handleWarnUnusedResult() argument
2514 S.Diag(Attr.getLoc(), diag::warn_attribute_void_function_method) in handleWarnUnusedResult()
2515 << Attr.getName() << 0; in handleWarnUnusedResult()
2520 S.Diag(Attr.getLoc(), diag::warn_attribute_void_function_method) in handleWarnUnusedResult()
2521 << Attr.getName() << 1; in handleWarnUnusedResult()
2527 if (!S.getLangOpts().CPlusPlus1z && Attr.isCXX11Attribute() && in handleWarnUnusedResult()
2528 !Attr.getScopeName()) in handleWarnUnusedResult()
2529 S.Diag(Attr.getLoc(), diag::ext_cxx1z_attr) << Attr.getName(); in handleWarnUnusedResult()
2532 WarnUnusedResultAttr(Attr.getRange(), S.Context, in handleWarnUnusedResult()
2533 Attr.getAttributeSpellingListIndex())); in handleWarnUnusedResult()
2536 static void handleWeakImportAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleWeakImportAttr() argument
2541 S.Diag(Attr.getLoc(), diag::warn_attribute_invalid_on_definition) in handleWeakImportAttr()
2548 S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) in handleWeakImportAttr()
2549 << Attr.getName() << ExpectedVariableOrFunction; in handleWeakImportAttr()
2555 WeakImportAttr(Attr.getRange(), S.Context, in handleWeakImportAttr()
2556 Attr.getAttributeSpellingListIndex())); in handleWeakImportAttr()
2562 const AttributeList &Attr) { in handleWorkGroupSize() argument
2565 const Expr *E = Attr.getArgAsExpr(i); in handleWorkGroupSize()
2566 if (!checkUInt32Argument(S, Attr, E, WGSize[i], i)) in handleWorkGroupSize()
2569 S.Diag(Attr.getLoc(), diag::err_attribute_argument_is_zero) in handleWorkGroupSize()
2570 << Attr.getName() << E->getSourceRange(); in handleWorkGroupSize()
2579 S.Diag(Attr.getLoc(), diag::warn_duplicate_attribute) << Attr.getName(); in handleWorkGroupSize()
2581 D->addAttr(::new (S.Context) WorkGroupAttr(Attr.getRange(), S.Context, in handleWorkGroupSize()
2583 Attr.getAttributeSpellingListIndex())); in handleWorkGroupSize()
2586 static void handleVecTypeHint(Sema &S, Decl *D, const AttributeList &Attr) { in handleVecTypeHint() argument
2587 if (!Attr.hasParsedType()) { in handleVecTypeHint()
2588 S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) in handleVecTypeHint()
2589 << Attr.getName() << 1; in handleVecTypeHint()
2594 QualType ParmType = S.GetTypeFromParser(Attr.getTypeArg(), &ParmTSI); in handleVecTypeHint()
2600 S.Diag(Attr.getLoc(), diag::err_attribute_argument_vec_type_hint) in handleVecTypeHint()
2607 S.Diag(Attr.getLoc(), diag::warn_duplicate_attribute) << Attr.getName(); in handleVecTypeHint()
2612 D->addAttr(::new (S.Context) VecTypeHintAttr(Attr.getLoc(), S.Context, in handleVecTypeHint()
2614 Attr.getAttributeSpellingListIndex())); in handleVecTypeHint()
2640 static void handleSectionAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleSectionAttr() argument
2645 if (!S.checkStringLiteralArgumentAttr(Attr, 0, Str, &LiteralLoc)) in handleSectionAttr()
2659 unsigned Index = Attr.getAttributeSpellingListIndex(); in handleSectionAttr()
2660 SectionAttr *NewAttr = S.mergeSectionAttr(D, Attr.getRange(), Str, Index); in handleSectionAttr()
2675 static void handleTargetAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleTargetAttr() argument
2678 if (!S.checkStringLiteralArgumentAttr(Attr, 0, Str, &LiteralLoc)) in handleTargetAttr()
2681 unsigned Index = Attr.getAttributeSpellingListIndex(); in handleTargetAttr()
2683 ::new (S.Context) TargetAttr(Attr.getRange(), S.Context, Str, Index); in handleTargetAttr()
2687 static void handleCleanupAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleCleanupAttr() argument
2690 S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName(); in handleCleanupAttr()
2694 Expr *E = Attr.getArgAsExpr(0); in handleCleanupAttr()
2746 CleanupAttr(Attr.getRange(), S.Context, FD, in handleCleanupAttr()
2747 Attr.getAttributeSpellingListIndex())); in handleCleanupAttr()
2752 static void handleFormatArgAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleFormatArgAttr() argument
2753 Expr *IdxExpr = Attr.getArgAsExpr(0); in handleFormatArgAttr()
2755 if (!checkFunctionOrMethodParameterIndex(S, D, Attr, 1, IdxExpr, Idx)) in handleFormatArgAttr()
2766 S.Diag(Attr.getLoc(), diag::err_format_attribute_not) in handleFormatArgAttr()
2776 S.Diag(Attr.getLoc(), diag::err_format_attribute_result_not) in handleFormatArgAttr()
2789 FormatArgAttr(Attr.getRange(), S.Context, Val.getZExtValue(), in handleFormatArgAttr()
2790 Attr.getAttributeSpellingListIndex())); in handleFormatArgAttr()
2825 const AttributeList &Attr) { in handleInitPriorityAttr() argument
2827 S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName(); in handleInitPriorityAttr()
2832 S.Diag(Attr.getLoc(), diag::err_init_priority_object_attr); in handleInitPriorityAttr()
2833 Attr.setInvalid(); in handleInitPriorityAttr()
2840 S.Diag(Attr.getLoc(), diag::err_init_priority_object_attr); in handleInitPriorityAttr()
2841 Attr.setInvalid(); in handleInitPriorityAttr()
2845 Expr *E = Attr.getArgAsExpr(0); in handleInitPriorityAttr()
2847 if (!checkUInt32Argument(S, Attr, E, prioritynum)) { in handleInitPriorityAttr()
2848 Attr.setInvalid(); in handleInitPriorityAttr()
2853 S.Diag(Attr.getLoc(), diag::err_attribute_argument_outof_range) in handleInitPriorityAttr()
2854 << E->getSourceRange() << Attr.getName() << 101 << 65535; in handleInitPriorityAttr()
2855 Attr.setInvalid(); in handleInitPriorityAttr()
2859 InitPriorityAttr(Attr.getRange(), S.Context, prioritynum, in handleInitPriorityAttr()
2860 Attr.getAttributeSpellingListIndex())); in handleInitPriorityAttr()
2886 static void handleFormatAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleFormatAttr() argument
2887 if (!Attr.isArgIdent(0)) { in handleFormatAttr()
2888 S.Diag(Attr.getLoc(), diag::err_attribute_argument_n_type) in handleFormatAttr()
2889 << Attr.getName() << 1 << AANT_ArgumentIdentifier; in handleFormatAttr()
2898 IdentifierInfo *II = Attr.getArgAsIdent(0)->Ident; in handleFormatAttr()
2913 S.Diag(Attr.getLoc(), diag::warn_attribute_type_not_supported) in handleFormatAttr()
2914 << Attr.getName() << II->getName(); in handleFormatAttr()
2919 Expr *IdxExpr = Attr.getArgAsExpr(1); in handleFormatAttr()
2921 if (!checkUInt32Argument(S, Attr, IdxExpr, Idx, 2)) in handleFormatAttr()
2925 S.Diag(Attr.getLoc(), diag::err_attribute_argument_out_of_bounds) in handleFormatAttr()
2926 << Attr.getName() << 2 << IdxExpr->getSourceRange(); in handleFormatAttr()
2935 S.Diag(Attr.getLoc(), in handleFormatAttr()
2948 S.Diag(Attr.getLoc(), diag::err_format_attribute_not) in handleFormatAttr()
2957 S.Diag(Attr.getLoc(), diag::err_format_attribute_not) in handleFormatAttr()
2964 S.Diag(Attr.getLoc(), diag::err_format_attribute_not) in handleFormatAttr()
2971 Expr *FirstArgExpr = Attr.getArgAsExpr(2); in handleFormatAttr()
2973 if (!checkUInt32Argument(S, Attr, FirstArgExpr, FirstArg, 3)) in handleFormatAttr()
2990 S.Diag(Attr.getLoc(), diag::err_format_strftime_third_parameter) in handleFormatAttr()
2996 S.Diag(Attr.getLoc(), diag::err_attribute_argument_out_of_bounds) in handleFormatAttr()
2997 << Attr.getName() << 3 << FirstArgExpr->getSourceRange(); in handleFormatAttr()
3001 FormatAttr *NewAttr = S.mergeFormatAttr(D, Attr.getRange(), II, in handleFormatAttr()
3003 Attr.getAttributeSpellingListIndex()); in handleFormatAttr()
3009 const AttributeList &Attr) { in handleTransparentUnionAttr() argument
3019 S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) in handleTransparentUnionAttr()
3020 << Attr.getName() << ExpectedUnion; in handleTransparentUnionAttr()
3025 S.Diag(Attr.getLoc(), in handleTransparentUnionAttr()
3033 S.Diag(Attr.getLoc(), diag::warn_transparent_union_attribute_zero_fields); in handleTransparentUnionAttr()
3073 TransparentUnionAttr(Attr.getRange(), S.Context, in handleTransparentUnionAttr()
3074 Attr.getAttributeSpellingListIndex())); in handleTransparentUnionAttr()
3077 static void handleAnnotateAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleAnnotateAttr() argument
3081 if (!S.checkStringLiteralArgumentAttr(Attr, 0, Str)) in handleAnnotateAttr()
3091 AnnotateAttr(Attr.getRange(), S.Context, Str, in handleAnnotateAttr()
3092 Attr.getAttributeSpellingListIndex())); in handleAnnotateAttr()
3096 const AttributeList &Attr) { in handleAlignValueAttr() argument
3097 S.AddAlignValueAttr(Attr.getRange(), D, Attr.getArgAsExpr(0), in handleAlignValueAttr()
3098 Attr.getAttributeSpellingListIndex()); in handleAlignValueAttr()
3146 static void handleAlignedAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleAlignedAttr() argument
3148 if (Attr.getNumArgs() > 1) { in handleAlignedAttr()
3149 S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) in handleAlignedAttr()
3150 << Attr.getName() << 1; in handleAlignedAttr()
3154 if (Attr.getNumArgs() == 0) { in handleAlignedAttr()
3155 D->addAttr(::new (S.Context) AlignedAttr(Attr.getRange(), S.Context, in handleAlignedAttr()
3156 true, nullptr, Attr.getAttributeSpellingListIndex())); in handleAlignedAttr()
3160 Expr *E = Attr.getArgAsExpr(0); in handleAlignedAttr()
3161 if (Attr.isPackExpansion() && !E->containsUnexpandedParameterPack()) { in handleAlignedAttr()
3162 S.Diag(Attr.getEllipsisLoc(), in handleAlignedAttr()
3167 if (!Attr.isPackExpansion() && S.DiagnoseUnexpandedParameterPack(E)) in handleAlignedAttr()
3173 S.Diag(Attr.getLoc(), diag::err_alignment_dependent_typedef_name) in handleAlignedAttr()
3180 S.AddAlignedAttr(Attr.getRange(), D, E, Attr.getAttributeSpellingListIndex(), in handleAlignedAttr()
3181 Attr.isPackExpansion()); in handleAlignedAttr()
3425 static void handleModeAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleModeAttr() argument
3428 if (!Attr.isArgIdent(0)) { in handleModeAttr()
3429 S.Diag(Attr.getLoc(), diag::err_attribute_argument_type) << Attr.getName() in handleModeAttr()
3434 IdentifierInfo *Name = Attr.getArgAsIdent(0)->Ident; in handleModeAttr()
3436 S.AddModeAttr(Attr.getRange(), D, Name, Attr.getAttributeSpellingListIndex()); in handleModeAttr()
3581 static void handleNoDebugAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleNoDebugAttr() argument
3583 NoDebugAttr(Attr.getRange(), S.Context, in handleNoDebugAttr()
3584 Attr.getAttributeSpellingListIndex())); in handleNoDebugAttr()
3674 const AttributeList &Attr) { in handleAlwaysInlineAttr() argument
3675 if (checkAttrMutualExclusion<NotTailCalledAttr>(S, D, Attr.getRange(), in handleAlwaysInlineAttr()
3676 Attr.getName())) in handleAlwaysInlineAttr()
3680 D, Attr.getRange(), Attr.getName(), in handleAlwaysInlineAttr()
3681 Attr.getAttributeSpellingListIndex())) in handleAlwaysInlineAttr()
3685 static void handleMinSizeAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleMinSizeAttr() argument
3687 D, Attr.getRange(), Attr.getAttributeSpellingListIndex())) in handleMinSizeAttr()
3692 const AttributeList &Attr) { in handleOptimizeNoneAttr() argument
3694 D, Attr.getRange(), Attr.getAttributeSpellingListIndex())) in handleOptimizeNoneAttr()
3698 static void handleGlobalAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleGlobalAttr() argument
3699 if (checkAttrMutualExclusion<CUDADeviceAttr>(S, D, Attr.getRange(), in handleGlobalAttr()
3700 Attr.getName()) || in handleGlobalAttr()
3701 checkAttrMutualExclusion<CUDAHostAttr>(S, D, Attr.getRange(), in handleGlobalAttr()
3702 Attr.getName())) { in handleGlobalAttr()
3727 CUDAGlobalAttr(Attr.getRange(), S.Context, in handleGlobalAttr()
3728 Attr.getAttributeSpellingListIndex())); in handleGlobalAttr()
3731 static void handleGNUInlineAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleGNUInlineAttr() argument
3734 S.Diag(Attr.getLoc(), diag::warn_gnu_inline_attribute_requires_inline); in handleGNUInlineAttr()
3739 GNUInlineAttr(Attr.getRange(), S.Context, in handleGNUInlineAttr()
3740 Attr.getAttributeSpellingListIndex())); in handleGNUInlineAttr()
3743 static void handleCallConvAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleCallConvAttr() argument
3749 if (S.CheckCallingConvAttr(Attr, CC, /*FD*/nullptr)) in handleCallConvAttr()
3753 S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) in handleCallConvAttr()
3754 << Attr.getName() << ExpectedFunctionOrMethod; in handleCallConvAttr()
3758 switch (Attr.getKind()) { in handleCallConvAttr()
3761 FastCallAttr(Attr.getRange(), S.Context, in handleCallConvAttr()
3762 Attr.getAttributeSpellingListIndex())); in handleCallConvAttr()
3766 StdCallAttr(Attr.getRange(), S.Context, in handleCallConvAttr()
3767 Attr.getAttributeSpellingListIndex())); in handleCallConvAttr()
3771 ThisCallAttr(Attr.getRange(), S.Context, in handleCallConvAttr()
3772 Attr.getAttributeSpellingListIndex())); in handleCallConvAttr()
3776 CDeclAttr(Attr.getRange(), S.Context, in handleCallConvAttr()
3777 Attr.getAttributeSpellingListIndex())); in handleCallConvAttr()
3781 PascalAttr(Attr.getRange(), S.Context, in handleCallConvAttr()
3782 Attr.getAttributeSpellingListIndex())); in handleCallConvAttr()
3786 SwiftCallAttr(Attr.getRange(), S.Context, in handleCallConvAttr()
3787 Attr.getAttributeSpellingListIndex())); in handleCallConvAttr()
3791 VectorCallAttr(Attr.getRange(), S.Context, in handleCallConvAttr()
3792 Attr.getAttributeSpellingListIndex())); in handleCallConvAttr()
3796 MSABIAttr(Attr.getRange(), S.Context, in handleCallConvAttr()
3797 Attr.getAttributeSpellingListIndex())); in handleCallConvAttr()
3801 SysVABIAttr(Attr.getRange(), S.Context, in handleCallConvAttr()
3802 Attr.getAttributeSpellingListIndex())); in handleCallConvAttr()
3818 PcsAttr(Attr.getRange(), S.Context, PCS, in handleCallConvAttr()
3819 Attr.getAttributeSpellingListIndex())); in handleCallConvAttr()
3824 IntelOclBiccAttr(Attr.getRange(), S.Context, in handleCallConvAttr()
3825 Attr.getAttributeSpellingListIndex())); in handleCallConvAttr()
3829 Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex())); in handleCallConvAttr()
3833 Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex())); in handleCallConvAttr()
4009 bool Sema::CheckRegparmAttr(const AttributeList &Attr, unsigned &numParams) { in CheckRegparmAttr() argument
4010 if (Attr.isInvalid()) in CheckRegparmAttr()
4013 if (!checkAttributeNumArgs(*this, Attr, 1)) { in CheckRegparmAttr()
4014 Attr.setInvalid(); in CheckRegparmAttr()
4019 Expr *NumParamsExpr = Attr.getArgAsExpr(0); in CheckRegparmAttr()
4020 if (!checkUInt32Argument(*this, Attr, NumParamsExpr, NP)) { in CheckRegparmAttr()
4021 Attr.setInvalid(); in CheckRegparmAttr()
4026 Diag(Attr.getLoc(), diag::err_attribute_regparm_wrong_platform) in CheckRegparmAttr()
4028 Attr.setInvalid(); in CheckRegparmAttr()
4034 Diag(Attr.getLoc(), diag::err_attribute_regparm_invalid_number) in CheckRegparmAttr()
4036 Attr.setInvalid(); in CheckRegparmAttr()
4048 const CUDALaunchBoundsAttr &Attr, in makeLaunchBoundsArgExpr() argument
4061 << &Attr << Idx << AANT_ArgumentIntegerConstant << E->getSourceRange(); in makeLaunchBoundsArgExpr()
4072 << &Attr << Idx << E->getSourceRange(); in makeLaunchBoundsArgExpr()
4103 const AttributeList &Attr) { in handleLaunchBoundsAttr() argument
4104 if (!checkAttributeAtLeastNumArgs(S, Attr, 1) || in handleLaunchBoundsAttr()
4105 !checkAttributeAtMostNumArgs(S, Attr, 2)) in handleLaunchBoundsAttr()
4108 S.AddLaunchBoundsAttr(Attr.getRange(), D, Attr.getArgAsExpr(0), in handleLaunchBoundsAttr()
4109 Attr.getNumArgs() > 1 ? Attr.getArgAsExpr(1) : nullptr, in handleLaunchBoundsAttr()
4110 Attr.getAttributeSpellingListIndex()); in handleLaunchBoundsAttr()
4114 const AttributeList &Attr) { in handleArgumentWithTypeTagAttr() argument
4115 if (!Attr.isArgIdent(0)) { in handleArgumentWithTypeTagAttr()
4116 S.Diag(Attr.getLoc(), diag::err_attribute_argument_n_type) in handleArgumentWithTypeTagAttr()
4117 << Attr.getName() << /* arg num = */ 1 << AANT_ArgumentIdentifier; in handleArgumentWithTypeTagAttr()
4121 if (!checkAttributeNumArgs(S, Attr, 3)) in handleArgumentWithTypeTagAttr()
4124 IdentifierInfo *ArgumentKind = Attr.getArgAsIdent(0)->Ident; in handleArgumentWithTypeTagAttr()
4127 S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type) in handleArgumentWithTypeTagAttr()
4128 << Attr.getName() << ExpectedFunctionOrMethod; in handleArgumentWithTypeTagAttr()
4133 if (!checkFunctionOrMethodParameterIndex(S, D, Attr, 2, Attr.getArgAsExpr(1), in handleArgumentWithTypeTagAttr()
4138 if (!checkFunctionOrMethodParameterIndex(S, D, Attr, 3, Attr.getArgAsExpr(2), in handleArgumentWithTypeTagAttr()
4142 bool IsPointer = (Attr.getName()->getName() == "pointer_with_type_tag"); in handleArgumentWithTypeTagAttr()
4147 S.Diag(Attr.getLoc(), diag::err_attribute_pointers_only) in handleArgumentWithTypeTagAttr()
4148 << Attr.getName() << 0; in handleArgumentWithTypeTagAttr()
4153 ArgumentWithTypeTagAttr(Attr.getRange(), S.Context, ArgumentKind, in handleArgumentWithTypeTagAttr()
4155 Attr.getAttributeSpellingListIndex())); in handleArgumentWithTypeTagAttr()
4159 const AttributeList &Attr) { in handleTypeTagForDatatypeAttr() argument
4160 if (!Attr.isArgIdent(0)) { in handleTypeTagForDatatypeAttr()
4161 S.Diag(Attr.getLoc(), diag::err_attribute_argument_n_type) in handleTypeTagForDatatypeAttr()
4162 << Attr.getName() << 1 << AANT_ArgumentIdentifier; in handleTypeTagForDatatypeAttr()
4166 if (!checkAttributeNumArgs(S, Attr, 1)) in handleTypeTagForDatatypeAttr()
4170 S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type) in handleTypeTagForDatatypeAttr()
4171 << Attr.getName() << ExpectedVariable; in handleTypeTagForDatatypeAttr()
4175 IdentifierInfo *PointerKind = Attr.getArgAsIdent(0)->Ident; in handleTypeTagForDatatypeAttr()
4177 S.GetTypeFromParser(Attr.getMatchingCType(), &MatchingCTypeLoc); in handleTypeTagForDatatypeAttr()
4181 TypeTagForDatatypeAttr(Attr.getRange(), S.Context, PointerKind, in handleTypeTagForDatatypeAttr()
4183 Attr.getLayoutCompatible(), in handleTypeTagForDatatypeAttr()
4184 Attr.getMustBeNull(), in handleTypeTagForDatatypeAttr()
4185 Attr.getAttributeSpellingListIndex())); in handleTypeTagForDatatypeAttr()
4209 static void handleNSConsumedAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleNSConsumedAttr() argument
4210 S.AddNSConsumedAttr(Attr.getRange(), D, Attr.getAttributeSpellingListIndex(), in handleNSConsumedAttr()
4211 Attr.getKind() == AttributeList::AT_NSConsumed, in handleNSConsumedAttr()
4252 const AttributeList &Attr) { in handleNSReturnsRetainedAttr() argument
4258 (Attr.getKind() == AttributeList::AT_NSReturnsRetained)) in handleNSReturnsRetainedAttr()
4268 << Attr.getName() << /*pointer-to-CF*/2 in handleNSReturnsRetainedAttr()
4269 << Attr.getRange(); in handleNSReturnsRetainedAttr()
4274 switch (Attr.getKind()) { in handleNSReturnsRetainedAttr()
4288 << Attr.getRange() << Attr.getName() << ExpectedDeclKind; in handleNSReturnsRetainedAttr()
4294 switch (Attr.getKind()) { in handleNSReturnsRetainedAttr()
4317 << Attr.getName() << /*pointer-to-CF*/2 in handleNSReturnsRetainedAttr()
4318 << Attr.getRange(); in handleNSReturnsRetainedAttr()
4331 << Attr.getName() << SubjectKind << cf in handleNSReturnsRetainedAttr()
4332 << Attr.getRange(); in handleNSReturnsRetainedAttr()
4337 switch (Attr.getKind()) { in handleNSReturnsRetainedAttr()
4342 Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex())); in handleNSReturnsRetainedAttr()
4346 Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex())); in handleNSReturnsRetainedAttr()
4350 Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex())); in handleNSReturnsRetainedAttr()
4354 Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex())); in handleNSReturnsRetainedAttr()
4358 Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex())); in handleNSReturnsRetainedAttr()
4414 const AttributeList &Attr) { in handleCFAuditedTransferAttr() argument
4415 if (checkAttrMutualExclusion<CFUnknownTransferAttr>(S, D, Attr.getRange(), in handleCFAuditedTransferAttr()
4416 Attr.getName())) in handleCFAuditedTransferAttr()
4420 CFAuditedTransferAttr(Attr.getRange(), S.Context, in handleCFAuditedTransferAttr()
4421 Attr.getAttributeSpellingListIndex())); in handleCFAuditedTransferAttr()
4425 const AttributeList &Attr) { in handleCFUnknownTransferAttr() argument
4426 if (checkAttrMutualExclusion<CFAuditedTransferAttr>(S, D, Attr.getRange(), in handleCFUnknownTransferAttr()
4427 Attr.getName())) in handleCFUnknownTransferAttr()
4431 CFUnknownTransferAttr(Attr.getRange(), S.Context, in handleCFUnknownTransferAttr()
4432 Attr.getAttributeSpellingListIndex())); in handleCFUnknownTransferAttr()
4436 const AttributeList &Attr) { in handleObjCBridgeAttr() argument
4437 IdentifierLoc * Parm = Attr.isArgIdent(0) ? Attr.getArgAsIdent(0) : nullptr; in handleObjCBridgeAttr()
4440 S.Diag(D->getLocStart(), diag::err_objc_attr_not_id) << Attr.getName() << 0; in handleObjCBridgeAttr()
4447 S.Diag(Attr.getLoc(), diag::err_objc_attr_typedef_not_id) in handleObjCBridgeAttr()
4448 << Attr.getName(); in handleObjCBridgeAttr()
4455 S.Diag(Attr.getLoc(), diag::err_objc_attr_typedef_not_void_pointer); in handleObjCBridgeAttr()
4461 ObjCBridgeAttr(Attr.getRange(), S.Context, Parm->Ident, in handleObjCBridgeAttr()
4462 Attr.getAttributeSpellingListIndex())); in handleObjCBridgeAttr()
4466 const AttributeList &Attr) { in handleObjCBridgeMutableAttr() argument
4467 IdentifierLoc * Parm = Attr.isArgIdent(0) ? Attr.getArgAsIdent(0) : nullptr; in handleObjCBridgeMutableAttr()
4470 S.Diag(D->getLocStart(), diag::err_objc_attr_not_id) << Attr.getName() << 0; in handleObjCBridgeMutableAttr()
4475 ObjCBridgeMutableAttr(Attr.getRange(), S.Context, Parm->Ident, in handleObjCBridgeMutableAttr()
4476 Attr.getAttributeSpellingListIndex())); in handleObjCBridgeMutableAttr()
4480 const AttributeList &Attr) { in handleObjCBridgeRelatedAttr() argument
4482 Attr.isArgIdent(0) ? Attr.getArgAsIdent(0)->Ident : nullptr; in handleObjCBridgeRelatedAttr()
4484 S.Diag(D->getLocStart(), diag::err_objc_attr_not_id) << Attr.getName() << 0; in handleObjCBridgeRelatedAttr()
4488 Attr.getArgAsIdent(1) ? Attr.getArgAsIdent(1)->Ident : nullptr; in handleObjCBridgeRelatedAttr()
4490 Attr.getArgAsIdent(2) ? Attr.getArgAsIdent(2)->Ident : nullptr; in handleObjCBridgeRelatedAttr()
4492 ObjCBridgeRelatedAttr(Attr.getRange(), S.Context, RelatedClass, in handleObjCBridgeRelatedAttr()
4494 Attr.getAttributeSpellingListIndex())); in handleObjCBridgeRelatedAttr()
4498 const AttributeList &Attr) { in handleObjCDesignatedInitializer() argument
4511 ObjCDesignatedInitializerAttr(Attr.getRange(), S.Context, in handleObjCDesignatedInitializer()
4512 Attr.getAttributeSpellingListIndex())); in handleObjCDesignatedInitializer()
4516 const AttributeList &Attr) { in handleObjCRuntimeName() argument
4518 if (!S.checkStringLiteralArgumentAttr(Attr, 0, MetaDataName)) in handleObjCRuntimeName()
4521 ObjCRuntimeNameAttr(Attr.getRange(), S.Context, in handleObjCRuntimeName()
4523 Attr.getAttributeSpellingListIndex())); in handleObjCRuntimeName()
4530 static void handleObjCBoxable(Sema &S, Decl *D, const AttributeList &Attr) { in handleObjCBoxable() argument
4541 ObjCBoxableAttr(Attr.getRange(), S.Context, in handleObjCBoxable()
4542 Attr.getAttributeSpellingListIndex()); in handleObjCBoxable()
4554 const AttributeList &Attr) { in handleObjCOwnershipAttr() argument
4558 << Attr.getRange() << Attr.getName() << ExpectedVariable; in handleObjCOwnershipAttr()
4562 const AttributeList &Attr) { in handleObjCPreciseLifetimeAttr() argument
4568 S.Diag(Attr.getLoc(), diag::err_objc_precise_lifetime_bad_type) in handleObjCPreciseLifetimeAttr()
4592 S.Diag(Attr.getLoc(), diag::warn_objc_precise_lifetime_meaningless) in handleObjCPreciseLifetimeAttr()
4598 ObjCPreciseLifetimeAttr(Attr.getRange(), S.Context, in handleObjCPreciseLifetimeAttr()
4599 Attr.getAttributeSpellingListIndex())); in handleObjCPreciseLifetimeAttr()
4606 static void handleUuidAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleUuidAttr() argument
4608 S.Diag(Attr.getLoc(), diag::err_attribute_not_supported_in_lang) in handleUuidAttr()
4609 << Attr.getName() << AttributeLangSupport::C; in handleUuidAttr()
4614 S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) in handleUuidAttr()
4615 << Attr.getName() << ExpectedClass; in handleUuidAttr()
4621 if (!S.checkStringLiteralArgumentAttr(Attr, 0, StrRef, &LiteralLoc)) in handleUuidAttr()
4647 D->addAttr(::new (S.Context) UuidAttr(Attr.getRange(), S.Context, StrRef, in handleUuidAttr()
4648 Attr.getAttributeSpellingListIndex())); in handleUuidAttr()
4651 static void handleMSInheritanceAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleMSInheritanceAttr() argument
4653 S.Diag(Attr.getLoc(), diag::err_attribute_not_supported_in_lang) in handleMSInheritanceAttr()
4654 << Attr.getName() << AttributeLangSupport::C; in handleMSInheritanceAttr()
4658 D, Attr.getRange(), /*BestCase=*/true, in handleMSInheritanceAttr()
4659 Attr.getAttributeSpellingListIndex(), in handleMSInheritanceAttr()
4660 (MSInheritanceAttr::Spelling)Attr.getSemanticSpelling()); in handleMSInheritanceAttr()
4668 const AttributeList &Attr) { in handleDeclspecThreadAttr() argument
4671 S.Diag(Attr.getLoc(), diag::err_thread_unsupported); in handleDeclspecThreadAttr()
4675 S.Diag(Attr.getLoc(), diag::err_declspec_thread_on_thread_variable); in handleDeclspecThreadAttr()
4679 S.Diag(Attr.getLoc(), diag::err_thread_non_global) << "__declspec(thread)"; in handleDeclspecThreadAttr()
4683 Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex())); in handleDeclspecThreadAttr()
4686 static void handleAbiTagAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleAbiTagAttr() argument
4688 for (unsigned I = 0, E = Attr.getNumArgs(); I != E; ++I) { in handleAbiTagAttr()
4690 if (!S.checkStringLiteralArgumentAttr(Attr, I, Tag)) in handleAbiTagAttr()
4697 S.Diag(Attr.getLoc(), diag::warn_attr_abi_tag_namespace) << 0; in handleAbiTagAttr()
4701 S.Diag(Attr.getLoc(), diag::warn_attr_abi_tag_namespace) << 1; in handleAbiTagAttr()
4704 if (Attr.getNumArgs() == 0) in handleAbiTagAttr()
4706 } else if (!checkAttributeAtLeastNumArgs(S, Attr, 1)) in handleAbiTagAttr()
4714 AbiTagAttr(Attr.getRange(), S.Context, Tags.data(), Tags.size(), in handleAbiTagAttr()
4715 Attr.getAttributeSpellingListIndex())); in handleAbiTagAttr()
4719 const AttributeList &Attr) { in handleARMInterruptAttr() argument
4721 if (Attr.getNumArgs() > 1) { in handleARMInterruptAttr()
4722 S.Diag(Attr.getLoc(), diag::err_attribute_too_many_arguments) in handleARMInterruptAttr()
4723 << Attr.getName() << 1; in handleARMInterruptAttr()
4730 if (Attr.getNumArgs() == 0) in handleARMInterruptAttr()
4732 else if (!S.checkStringLiteralArgumentAttr(Attr, 0, Str, &ArgLoc)) in handleARMInterruptAttr()
4737 S.Diag(Attr.getLoc(), diag::warn_attribute_type_not_supported) in handleARMInterruptAttr()
4738 << Attr.getName() << Str << ArgLoc; in handleARMInterruptAttr()
4742 unsigned Index = Attr.getAttributeSpellingListIndex(); in handleARMInterruptAttr()
4744 ARMInterruptAttr(Attr.getLoc(), S.Context, Kind, Index)); in handleARMInterruptAttr()
4748 const AttributeList &Attr) { in handleMSP430InterruptAttr() argument
4749 if (!checkAttributeNumArgs(S, Attr, 1)) in handleMSP430InterruptAttr()
4752 if (!Attr.isArgExpr(0)) { in handleMSP430InterruptAttr()
4753 S.Diag(Attr.getLoc(), diag::err_attribute_argument_type) << Attr.getName() in handleMSP430InterruptAttr()
4760 Expr *NumParamsExpr = static_cast<Expr *>(Attr.getArgAsExpr(0)); in handleMSP430InterruptAttr()
4763 S.Diag(Attr.getLoc(), diag::err_attribute_argument_type) in handleMSP430InterruptAttr()
4764 << Attr.getName() << AANT_ArgumentIntegerConstant in handleMSP430InterruptAttr()
4771 S.Diag(Attr.getLoc(), diag::err_attribute_argument_out_of_bounds) in handleMSP430InterruptAttr()
4772 << Attr.getName() << (int)NumParams.getSExtValue() in handleMSP430InterruptAttr()
4778 MSP430InterruptAttr(Attr.getLoc(), S.Context, Num, in handleMSP430InterruptAttr()
4779 Attr.getAttributeSpellingListIndex())); in handleMSP430InterruptAttr()
4784 const AttributeList &Attr) { in handleMipsInterruptAttr() argument
4786 if (Attr.getNumArgs() > 1) { in handleMipsInterruptAttr()
4787 S.Diag(Attr.getLoc(), diag::err_attribute_too_many_arguments) in handleMipsInterruptAttr()
4788 << Attr.getName() << 1; in handleMipsInterruptAttr()
4795 if (Attr.getNumArgs() == 0) in handleMipsInterruptAttr()
4797 else if (!S.checkStringLiteralArgumentAttr(Attr, 0, Str, &ArgLoc)) in handleMipsInterruptAttr()
4827 if (checkAttrMutualExclusion<Mips16Attr>(S, D, Attr.getRange(), in handleMipsInterruptAttr()
4828 Attr.getName())) in handleMipsInterruptAttr()
4833 S.Diag(Attr.getLoc(), diag::warn_attribute_type_not_supported) in handleMipsInterruptAttr()
4834 << Attr.getName() << "'" + std::string(Str) + "'"; in handleMipsInterruptAttr()
4839 Attr.getLoc(), S.Context, Kind, Attr.getAttributeSpellingListIndex())); in handleMipsInterruptAttr()
4843 const AttributeList &Attr) { in handleAnyX86InterruptAttr() argument
4853 S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) in handleAnyX86InterruptAttr()
4854 << Attr.getName() << ExpectedFunctionWithProtoType; in handleAnyX86InterruptAttr()
4904 Attr.getLoc(), S.Context, Attr.getAttributeSpellingListIndex())); in handleAnyX86InterruptAttr()
4908 static void handleInterruptAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleInterruptAttr() argument
4912 handleMSP430InterruptAttr(S, D, Attr); in handleInterruptAttr()
4916 handleMipsInterruptAttr(S, D, Attr); in handleInterruptAttr()
4920 handleAnyX86InterruptAttr(S, D, Attr); in handleInterruptAttr()
4923 handleARMInterruptAttr(S, D, Attr); in handleInterruptAttr()
4929 const AttributeList &Attr) { in handleAMDGPUNumVGPRAttr() argument
4931 Expr *NumRegsExpr = static_cast<Expr *>(Attr.getArgAsExpr(0)); in handleAMDGPUNumVGPRAttr()
4932 if (!checkUInt32Argument(S, Attr, NumRegsExpr, NumRegs)) in handleAMDGPUNumVGPRAttr()
4936 AMDGPUNumVGPRAttr(Attr.getLoc(), S.Context, in handleAMDGPUNumVGPRAttr()
4938 Attr.getAttributeSpellingListIndex())); in handleAMDGPUNumVGPRAttr()
4942 const AttributeList &Attr) { in handleAMDGPUNumSGPRAttr() argument
4944 Expr *NumRegsExpr = static_cast<Expr *>(Attr.getArgAsExpr(0)); in handleAMDGPUNumSGPRAttr()
4945 if (!checkUInt32Argument(S, Attr, NumRegsExpr, NumRegs)) in handleAMDGPUNumSGPRAttr()
4949 AMDGPUNumSGPRAttr(Attr.getLoc(), S.Context, in handleAMDGPUNumSGPRAttr()
4951 Attr.getAttributeSpellingListIndex())); in handleAMDGPUNumSGPRAttr()
4955 const AttributeList& Attr) { in handleX86ForceAlignArgPointerAttr() argument
4969 S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) in handleX86ForceAlignArgPointerAttr()
4970 << Attr.getName() << /* function */0; in handleX86ForceAlignArgPointerAttr()
4975 X86ForceAlignArgPointerAttr(Attr.getRange(), S.Context, in handleX86ForceAlignArgPointerAttr()
4976 Attr.getAttributeSpellingListIndex())); in handleX86ForceAlignArgPointerAttr()
4979 static void handleLayoutVersion(Sema &S, Decl *D, const AttributeList &Attr) { in handleLayoutVersion() argument
4981 Expr *VersionExpr = static_cast<Expr *>(Attr.getArgAsExpr(0)); in handleLayoutVersion()
4982 if (!checkUInt32Argument(S, Attr, Attr.getArgAsExpr(0), Version)) in handleLayoutVersion()
4987 S.Diag(Attr.getLoc(), diag::err_attribute_argument_out_of_bounds) in handleLayoutVersion()
4988 << Attr.getName() << Version << VersionExpr->getSourceRange(); in handleLayoutVersion()
4993 LayoutVersionAttr(Attr.getRange(), S.Context, Version, in handleLayoutVersion()
4994 Attr.getAttributeSpellingListIndex())); in handleLayoutVersion()
5050 Attr *NewAttr = A.getKind() == AttributeList::AT_DLLExport in handleDLLAttr()
5051 ? (Attr *)S.mergeDLLExportAttr(D, A.getRange(), Index) in handleDLLAttr()
5052 : (Attr *)S.mergeDLLImportAttr(D, A.getRange(), Index); in handleDLLAttr()
5093 static void handleCapabilityAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleCapabilityAttr() argument
5104 if (Attr.getKind() == AttributeList::AT_Capability && in handleCapabilityAttr()
5105 !S.checkStringLiteralArgumentAttr(Attr, 0, N, &LiteralLoc)) in handleCapabilityAttr()
5113 D->addAttr(::new (S.Context) CapabilityAttr(Attr.getRange(), S.Context, N, in handleCapabilityAttr()
5114 Attr.getAttributeSpellingListIndex())); in handleCapabilityAttr()
5118 const AttributeList &Attr) { in handleAssertCapabilityAttr() argument
5119 D->addAttr(::new (S.Context) AssertCapabilityAttr(Attr.getRange(), S.Context, in handleAssertCapabilityAttr()
5120 Attr.getArgAsExpr(0), in handleAssertCapabilityAttr()
5121 Attr.getAttributeSpellingListIndex())); in handleAssertCapabilityAttr()
5125 const AttributeList &Attr) { in handleAcquireCapabilityAttr() argument
5127 if (!checkLockFunAttrCommon(S, D, Attr, Args)) in handleAcquireCapabilityAttr()
5130 D->addAttr(::new (S.Context) AcquireCapabilityAttr(Attr.getRange(), in handleAcquireCapabilityAttr()
5133 Attr.getAttributeSpellingListIndex())); in handleAcquireCapabilityAttr()
5137 const AttributeList &Attr) { in handleTryAcquireCapabilityAttr() argument
5139 if (!checkTryLockFunAttrCommon(S, D, Attr, Args)) in handleTryAcquireCapabilityAttr()
5142 D->addAttr(::new (S.Context) TryAcquireCapabilityAttr(Attr.getRange(), in handleTryAcquireCapabilityAttr()
5144 Attr.getArgAsExpr(0), in handleTryAcquireCapabilityAttr()
5147 Attr.getAttributeSpellingListIndex())); in handleTryAcquireCapabilityAttr()
5151 const AttributeList &Attr) { in handleReleaseCapabilityAttr() argument
5154 checkAttrArgsAreCapabilityObjs(S, D, Attr, Args, 0, true); in handleReleaseCapabilityAttr()
5157 Attr.getRange(), S.Context, Args.data(), Args.size(), in handleReleaseCapabilityAttr()
5158 Attr.getAttributeSpellingListIndex())); in handleReleaseCapabilityAttr()
5162 const AttributeList &Attr) { in handleRequiresCapabilityAttr() argument
5163 if (!checkAttributeAtLeastNumArgs(S, Attr, 1)) in handleRequiresCapabilityAttr()
5168 checkAttrArgsAreCapabilityObjs(S, D, Attr, Args); in handleRequiresCapabilityAttr()
5173 RequiresCapabilityAttr(Attr.getRange(), S.Context, Args.data(), in handleRequiresCapabilityAttr()
5174 Args.size(), Attr.getAttributeSpellingListIndex()); in handleRequiresCapabilityAttr()
5179 static void handleDeprecatedAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleDeprecatedAttr() argument
5182 S.Diag(Attr.getLoc(), diag::warn_deprecated_anonymous_namespace); in handleDeprecatedAttr()
5192 if (Attr.isArgExpr(0) && Attr.getArgAsExpr(0) && in handleDeprecatedAttr()
5193 !S.checkStringLiteralArgumentAttr(Attr, 0, Str)) in handleDeprecatedAttr()
5197 if (Attr.isDeclspecAttribute() || Attr.isCXX11Attribute()) in handleDeprecatedAttr()
5198 checkAttributeAtMostNumArgs(S, Attr, 1); in handleDeprecatedAttr()
5199 else if (Attr.isArgExpr(1) && Attr.getArgAsExpr(1) && in handleDeprecatedAttr()
5200 !S.checkStringLiteralArgumentAttr(Attr, 1, Replacement)) in handleDeprecatedAttr()
5204 if (Attr.isCXX11Attribute() && in handleDeprecatedAttr()
5205 !(Attr.hasScope() && Attr.getScopeName()->isStr("gnu"))) in handleDeprecatedAttr()
5206 S.Diag(Attr.getLoc(), diag::ext_cxx14_attr) << Attr.getName(); in handleDeprecatedAttr()
5208 D->addAttr(::new (S.Context) DeprecatedAttr(Attr.getRange(), S.Context, Str, in handleDeprecatedAttr()
5210 Attr.getAttributeSpellingListIndex())); in handleDeprecatedAttr()
5213 static void handleNoSanitizeAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleNoSanitizeAttr() argument
5214 if (!checkAttributeAtLeastNumArgs(S, Attr, 1)) in handleNoSanitizeAttr()
5219 for (unsigned I = 0, E = Attr.getNumArgs(); I != E; ++I) { in handleNoSanitizeAttr()
5223 if (!S.checkStringLiteralArgumentAttr(Attr, I, SanitizerName, &LiteralLoc)) in handleNoSanitizeAttr()
5233 Attr.getRange(), S.Context, Sanitizers.data(), Sanitizers.size(), in handleNoSanitizeAttr()
5234 Attr.getAttributeSpellingListIndex())); in handleNoSanitizeAttr()
5238 const AttributeList &Attr) { in handleNoSanitizeSpecificAttr() argument
5239 StringRef AttrName = Attr.getName()->getName(); in handleNoSanitizeSpecificAttr()
5248 NoSanitizeAttr(Attr.getRange(), S.Context, &SanitizerName, 1, in handleNoSanitizeSpecificAttr()
5249 Attr.getAttributeSpellingListIndex())); in handleNoSanitizeSpecificAttr()
5253 const AttributeList &Attr) { in handleInternalLinkageAttr() argument
5255 S.mergeInternalLinkageAttr(D, Attr.getRange(), Attr.getName(), in handleInternalLinkageAttr()
5256 Attr.getAttributeSpellingListIndex())) in handleInternalLinkageAttr()
5260 static void handleOpenCLNoSVMAttr(Sema &S, Decl *D, const AttributeList &Attr) { in handleOpenCLNoSVMAttr() argument
5262 S.Diag(Attr.getLoc(), diag::err_attribute_requires_opencl_version) in handleOpenCLNoSVMAttr()
5263 << Attr.getName() << "2.0" << 0; in handleOpenCLNoSVMAttr()
5265 S.Diag(Attr.getLoc(), diag::warn_opencl_attr_deprecated_ignored) in handleOpenCLNoSVMAttr()
5266 << Attr.getName() << "2.0"; in handleOpenCLNoSVMAttr()
5273 const AttributeList &Attr) { in handleCommonAttributeFeatures() argument
5279 if (Attr.hasCustomParsing() || in handleCommonAttributeFeatures()
5280 Attr.getKind() == AttributeList::UnknownAttribute) in handleCommonAttributeFeatures()
5285 if (!Attr.diagnoseLangOpts(S)) in handleCommonAttributeFeatures()
5288 if (Attr.getMinArgs() == Attr.getMaxArgs()) { in handleCommonAttributeFeatures()
5291 if (!checkAttributeNumArgs(S, Attr, Attr.getMinArgs())) in handleCommonAttributeFeatures()
5295 if (Attr.getMinArgs() && in handleCommonAttributeFeatures()
5296 !checkAttributeAtLeastNumArgs(S, Attr, Attr.getMinArgs())) in handleCommonAttributeFeatures()
5298 else if (!Attr.hasVariadicArg() && Attr.getMaxArgs() && in handleCommonAttributeFeatures()
5299 !checkAttributeAtMostNumArgs(S, Attr, Attr.getMaxArgs())) in handleCommonAttributeFeatures()
5304 if (!Attr.diagnoseAppertainsTo(S, D)) in handleCommonAttributeFeatures()
5311 const AttributeList &Attr) { in handleOpenCLAccessAttr() argument
5317 S.Diag(Attr.getLoc(), diag::err_opencl_multiple_access_qualifiers) in handleOpenCLAccessAttr()
5330 if (Attr.getName()->getName().find("read_write") != StringRef::npos) { in handleOpenCLAccessAttr()
5332 S.Diag(Attr.getLoc(), diag::err_opencl_invalid_read_write) in handleOpenCLAccessAttr()
5333 << Attr.getName() << PDecl->getType() << DeclTy->isImageType(); in handleOpenCLAccessAttr()
5341 Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex())); in handleOpenCLAccessAttr()
5352 const AttributeList &Attr, in ProcessDeclAttribute() argument
5354 if (Attr.isInvalid() || Attr.getKind() == AttributeList::IgnoredAttribute) in ProcessDeclAttribute()
5359 if (Attr.isCXX11Attribute() && !IncludeCXX11Attributes) in ProcessDeclAttribute()
5365 if (Attr.getKind() == AttributeList::UnknownAttribute || in ProcessDeclAttribute()
5366 !Attr.existsInTarget(S.Context.getTargetInfo())) { in ProcessDeclAttribute()
5367 S.Diag(Attr.getLoc(), Attr.isDeclspecAttribute() in ProcessDeclAttribute()
5370 << Attr.getName(); in ProcessDeclAttribute()
5374 if (handleCommonAttributeFeatures(S, scope, D, Attr)) in ProcessDeclAttribute()
5377 switch (Attr.getKind()) { in ProcessDeclAttribute()
5379 if (!Attr.isStmtAttr()) { in ProcessDeclAttribute()
5381 assert(Attr.isTypeAttr() && "Non-type attribute not handled"); in ProcessDeclAttribute()
5384 S.Diag(Attr.getLoc(), diag::err_stmt_attribute_invalid_on_decl) in ProcessDeclAttribute()
5385 << Attr.getName() << D->getLocation(); in ProcessDeclAttribute()
5388 handleInterruptAttr(S, D, Attr); in ProcessDeclAttribute()
5391 handleX86ForceAlignArgPointerAttr(S, D, Attr); in ProcessDeclAttribute()
5395 handleDLLAttr(S, D, Attr); in ProcessDeclAttribute()
5399 Attr); in ProcessDeclAttribute()
5402 handleSimpleAttribute<NoMips16Attr>(S, D, Attr); in ProcessDeclAttribute()
5405 handleAMDGPUNumVGPRAttr(S, D, Attr); in ProcessDeclAttribute()
5408 handleAMDGPUNumSGPRAttr(S, D, Attr); in ProcessDeclAttribute()
5411 handleSimpleAttribute<IBActionAttr>(S, D, Attr); in ProcessDeclAttribute()
5414 handleIBOutlet(S, D, Attr); in ProcessDeclAttribute()
5417 handleIBOutletCollection(S, D, Attr); in ProcessDeclAttribute()
5420 handleIFuncAttr(S, D, Attr); in ProcessDeclAttribute()
5423 handleAliasAttr(S, D, Attr); in ProcessDeclAttribute()
5426 handleAlignedAttr(S, D, Attr); in ProcessDeclAttribute()
5429 handleAlignValueAttr(S, D, Attr); in ProcessDeclAttribute()
5432 handleAlwaysInlineAttr(S, D, Attr); in ProcessDeclAttribute()
5435 handleAnalyzerNoReturnAttr(S, D, Attr); in ProcessDeclAttribute()
5438 handleTLSModelAttr(S, D, Attr); in ProcessDeclAttribute()
5441 handleAnnotateAttr(S, D, Attr); in ProcessDeclAttribute()
5444 handleAvailabilityAttr(S, D, Attr); in ProcessDeclAttribute()
5447 handleDependencyAttr(S, scope, D, Attr); in ProcessDeclAttribute()
5450 handleCommonAttr(S, D, Attr); in ProcessDeclAttribute()
5454 Attr); in ProcessDeclAttribute()
5457 handlePassObjectSizeAttr(S, D, Attr); in ProcessDeclAttribute()
5460 handleConstructorAttr(S, D, Attr); in ProcessDeclAttribute()
5463 handleSimpleAttribute<CXX11NoReturnAttr>(S, D, Attr); in ProcessDeclAttribute()
5466 handleDeprecatedAttr(S, D, Attr); in ProcessDeclAttribute()
5469 handleDestructorAttr(S, D, Attr); in ProcessDeclAttribute()
5472 handleEnableIfAttr(S, D, Attr); in ProcessDeclAttribute()
5475 handleExtVectorTypeAttr(S, scope, D, Attr); in ProcessDeclAttribute()
5478 handleMinSizeAttr(S, D, Attr); in ProcessDeclAttribute()
5481 handleOptimizeNoneAttr(S, D, Attr); in ProcessDeclAttribute()
5484 handleSimpleAttribute<FlagEnumAttr>(S, D, Attr); in ProcessDeclAttribute()
5487 handleSimpleAttribute<FlattenAttr>(S, D, Attr); in ProcessDeclAttribute()
5490 handleFormatAttr(S, D, Attr); in ProcessDeclAttribute()
5493 handleFormatArgAttr(S, D, Attr); in ProcessDeclAttribute()
5496 handleGlobalAttr(S, D, Attr); in ProcessDeclAttribute()
5500 Attr); in ProcessDeclAttribute()
5504 Attr); in ProcessDeclAttribute()
5507 handleGNUInlineAttr(S, D, Attr); in ProcessDeclAttribute()
5510 handleLaunchBoundsAttr(S, D, Attr); in ProcessDeclAttribute()
5513 handleRestrictAttr(S, D, Attr); in ProcessDeclAttribute()
5516 handleSimpleAttribute<MayAliasAttr>(S, D, Attr); in ProcessDeclAttribute()
5519 handleModeAttr(S, D, Attr); in ProcessDeclAttribute()
5522 handleSimpleAttribute<NoAliasAttr>(S, D, Attr); in ProcessDeclAttribute()
5525 handleSimpleAttribute<NoCommonAttr>(S, D, Attr); in ProcessDeclAttribute()
5528 handleSimpleAttribute<NoSplitStackAttr>(S, D, Attr); in ProcessDeclAttribute()
5532 handleNonNullAttrParameter(S, PVD, Attr); in ProcessDeclAttribute()
5534 handleNonNullAttr(S, D, Attr); in ProcessDeclAttribute()
5537 handleReturnsNonNullAttr(S, D, Attr); in ProcessDeclAttribute()
5540 handleAssumeAlignedAttr(S, D, Attr); in ProcessDeclAttribute()
5543 handleSimpleAttribute<OverloadableAttr>(S, D, Attr); in ProcessDeclAttribute()
5546 handleOwnershipAttr(S, D, Attr); in ProcessDeclAttribute()
5549 handleColdAttr(S, D, Attr); in ProcessDeclAttribute()
5552 handleHotAttr(S, D, Attr); in ProcessDeclAttribute()
5555 handleNakedAttr(S, D, Attr); in ProcessDeclAttribute()
5558 handleNoReturnAttr(S, D, Attr); in ProcessDeclAttribute()
5561 handleSimpleAttribute<NoThrowAttr>(S, D, Attr); in ProcessDeclAttribute()
5565 Attr); in ProcessDeclAttribute()
5568 handleVecReturnAttr(S, D, Attr); in ProcessDeclAttribute()
5571 handleObjCOwnershipAttr(S, D, Attr); in ProcessDeclAttribute()
5574 handleObjCPreciseLifetimeAttr(S, D, Attr); in ProcessDeclAttribute()
5577 handleObjCReturnsInnerPointerAttr(S, D, Attr); in ProcessDeclAttribute()
5580 handleObjCRequiresSuperAttr(S, D, Attr); in ProcessDeclAttribute()
5583 handleObjCBridgeAttr(S, scope, D, Attr); in ProcessDeclAttribute()
5586 handleObjCBridgeMutableAttr(S, scope, D, Attr); in ProcessDeclAttribute()
5589 handleObjCBridgeRelatedAttr(S, scope, D, Attr); in ProcessDeclAttribute()
5592 handleObjCDesignatedInitializer(S, D, Attr); in ProcessDeclAttribute()
5595 handleObjCRuntimeName(S, D, Attr); in ProcessDeclAttribute()
5598 handleSimpleAttribute<ObjCRuntimeVisibleAttr>(S, D, Attr); in ProcessDeclAttribute()
5601 handleObjCBoxable(S, D, Attr); in ProcessDeclAttribute()
5604 handleCFAuditedTransferAttr(S, D, Attr); in ProcessDeclAttribute()
5607 handleCFUnknownTransferAttr(S, D, Attr); in ProcessDeclAttribute()
5611 handleNSConsumedAttr(S, D, Attr); in ProcessDeclAttribute()
5614 handleSimpleAttribute<NSConsumesSelfAttr>(S, D, Attr); in ProcessDeclAttribute()
5621 handleNSReturnsRetainedAttr(S, D, Attr); in ProcessDeclAttribute()
5624 handleWorkGroupSize<WorkGroupSizeHintAttr>(S, D, Attr); in ProcessDeclAttribute()
5627 handleWorkGroupSize<ReqdWorkGroupSizeAttr>(S, D, Attr); in ProcessDeclAttribute()
5630 handleVecTypeHint(S, D, Attr); in ProcessDeclAttribute()
5633 handleInitPriorityAttr(S, D, Attr); in ProcessDeclAttribute()
5636 handlePackedAttr(S, D, Attr); in ProcessDeclAttribute()
5639 handleSectionAttr(S, D, Attr); in ProcessDeclAttribute()
5642 handleTargetAttr(S, D, Attr); in ProcessDeclAttribute()
5645 handleAttrWithMessage<UnavailableAttr>(S, D, Attr); in ProcessDeclAttribute()
5648 handleSimpleAttribute<ArcWeakrefUnavailableAttr>(S, D, Attr); in ProcessDeclAttribute()
5651 handleSimpleAttribute<ObjCRootClassAttr>(S, D, Attr); in ProcessDeclAttribute()
5654 handleObjCSuppresProtocolAttr(S, D, Attr); in ProcessDeclAttribute()
5657 handleSimpleAttribute<ObjCRequiresPropertyDefsAttr>(S, D, Attr); in ProcessDeclAttribute()
5660 handleUnusedAttr(S, D, Attr); in ProcessDeclAttribute()
5663 handleSimpleAttribute<ReturnsTwiceAttr>(S, D, Attr); in ProcessDeclAttribute()
5666 handleNotTailCalledAttr(S, D, Attr); in ProcessDeclAttribute()
5669 handleDisableTailCallsAttr(S, D, Attr); in ProcessDeclAttribute()
5672 handleUsedAttr(S, D, Attr); in ProcessDeclAttribute()
5675 handleVisibilityAttr(S, D, Attr, false); in ProcessDeclAttribute()
5678 handleVisibilityAttr(S, D, Attr, true); in ProcessDeclAttribute()
5681 handleSimpleAttribute<WarnUnusedAttr>(S, D, Attr); in ProcessDeclAttribute()
5684 handleWarnUnusedResult(S, D, Attr); in ProcessDeclAttribute()
5687 handleSimpleAttribute<WeakAttr>(S, D, Attr); in ProcessDeclAttribute()
5690 handleWeakRefAttr(S, D, Attr); in ProcessDeclAttribute()
5693 handleWeakImportAttr(S, D, Attr); in ProcessDeclAttribute()
5696 handleTransparentUnionAttr(S, D, Attr); in ProcessDeclAttribute()
5699 handleSimpleAttribute<ObjCExceptionAttr>(S, D, Attr); in ProcessDeclAttribute()
5702 handleObjCMethodFamilyAttr(S, D, Attr); in ProcessDeclAttribute()
5705 handleObjCNSObject(S, D, Attr); in ProcessDeclAttribute()
5708 handleObjCIndependentClass(S, D, Attr); in ProcessDeclAttribute()
5711 handleBlocksAttr(S, D, Attr); in ProcessDeclAttribute()
5714 handleSentinelAttr(S, D, Attr); in ProcessDeclAttribute()
5717 handleSimpleAttribute<ConstAttr>(S, D, Attr); in ProcessDeclAttribute()
5720 handleSimpleAttribute<PureAttr>(S, D, Attr); in ProcessDeclAttribute()
5723 handleCleanupAttr(S, D, Attr); in ProcessDeclAttribute()
5726 handleNoDebugAttr(S, D, Attr); in ProcessDeclAttribute()
5729 handleSimpleAttribute<NoDuplicateAttr>(S, D, Attr); in ProcessDeclAttribute()
5732 handleSimpleAttribute<NoInlineAttr>(S, D, Attr); in ProcessDeclAttribute()
5735 handleSimpleAttribute<NoInstrumentFunctionAttr>(S, D, Attr); in ProcessDeclAttribute()
5750 handleCallConvAttr(S, D, Attr); in ProcessDeclAttribute()
5753 handleSimpleAttribute<OpenCLKernelAttr>(S, D, Attr); in ProcessDeclAttribute()
5756 handleOpenCLAccessAttr(S, D, Attr); in ProcessDeclAttribute()
5759 handleOpenCLNoSVMAttr(S, D, Attr); in ProcessDeclAttribute()
5762 handleParameterABIAttr(S, D, Attr, ParameterABI::SwiftContext); in ProcessDeclAttribute()
5765 handleParameterABIAttr(S, D, Attr, ParameterABI::SwiftErrorResult); in ProcessDeclAttribute()
5768 handleParameterABIAttr(S, D, Attr, ParameterABI::SwiftIndirectResult); in ProcessDeclAttribute()
5771 handleInternalLinkageAttr(S, D, Attr); in ProcessDeclAttribute()
5774 handleSimpleAttribute<LTOVisibilityPublicAttr>(S, D, Attr); in ProcessDeclAttribute()
5779 handleSimpleAttribute<EmptyBasesAttr>(S, D, Attr); in ProcessDeclAttribute()
5782 handleLayoutVersion(S, D, Attr); in ProcessDeclAttribute()
5785 handleSimpleAttribute<MSNoVTableAttr>(S, D, Attr); in ProcessDeclAttribute()
5788 handleSimpleAttribute<MSStructAttr>(S, D, Attr); in ProcessDeclAttribute()
5791 handleUuidAttr(S, D, Attr); in ProcessDeclAttribute()
5794 handleMSInheritanceAttr(S, D, Attr); in ProcessDeclAttribute()
5797 handleSimpleAttribute<SelectAnyAttr>(S, D, Attr); in ProcessDeclAttribute()
5800 handleDeclspecThreadAttr(S, D, Attr); in ProcessDeclAttribute()
5804 handleAbiTagAttr(S, D, Attr); in ProcessDeclAttribute()
5809 handleAssertExclusiveLockAttr(S, D, Attr); in ProcessDeclAttribute()
5812 handleAssertSharedLockAttr(S, D, Attr); in ProcessDeclAttribute()
5815 handleSimpleAttribute<GuardedVarAttr>(S, D, Attr); in ProcessDeclAttribute()
5818 handlePtGuardedVarAttr(S, D, Attr); in ProcessDeclAttribute()
5821 handleSimpleAttribute<ScopedLockableAttr>(S, D, Attr); in ProcessDeclAttribute()
5824 handleNoSanitizeAttr(S, D, Attr); in ProcessDeclAttribute()
5827 handleNoSanitizeSpecificAttr(S, D, Attr); in ProcessDeclAttribute()
5830 handleSimpleAttribute<NoThreadSafetyAnalysisAttr>(S, D, Attr); in ProcessDeclAttribute()
5833 handleGuardedByAttr(S, D, Attr); in ProcessDeclAttribute()
5836 handlePtGuardedByAttr(S, D, Attr); in ProcessDeclAttribute()
5839 handleExclusiveTrylockFunctionAttr(S, D, Attr); in ProcessDeclAttribute()
5842 handleLockReturnedAttr(S, D, Attr); in ProcessDeclAttribute()
5845 handleLocksExcludedAttr(S, D, Attr); in ProcessDeclAttribute()
5848 handleSharedTrylockFunctionAttr(S, D, Attr); in ProcessDeclAttribute()
5851 handleAcquiredBeforeAttr(S, D, Attr); in ProcessDeclAttribute()
5854 handleAcquiredAfterAttr(S, D, Attr); in ProcessDeclAttribute()
5860 handleCapabilityAttr(S, D, Attr); in ProcessDeclAttribute()
5863 handleRequiresCapabilityAttr(S, D, Attr); in ProcessDeclAttribute()
5867 handleAssertCapabilityAttr(S, D, Attr); in ProcessDeclAttribute()
5870 handleAcquireCapabilityAttr(S, D, Attr); in ProcessDeclAttribute()
5873 handleReleaseCapabilityAttr(S, D, Attr); in ProcessDeclAttribute()
5876 handleTryAcquireCapabilityAttr(S, D, Attr); in ProcessDeclAttribute()
5881 handleConsumableAttr(S, D, Attr); in ProcessDeclAttribute()
5884 handleSimpleAttribute<ConsumableAutoCastAttr>(S, D, Attr); in ProcessDeclAttribute()
5887 handleSimpleAttribute<ConsumableSetOnReadAttr>(S, D, Attr); in ProcessDeclAttribute()
5890 handleCallableWhenAttr(S, D, Attr); in ProcessDeclAttribute()
5893 handleParamTypestateAttr(S, D, Attr); in ProcessDeclAttribute()
5896 handleReturnTypestateAttr(S, D, Attr); in ProcessDeclAttribute()
5899 handleSetTypestateAttr(S, D, Attr); in ProcessDeclAttribute()
5902 handleTestTypestateAttr(S, D, Attr); in ProcessDeclAttribute()
5907 handleArgumentWithTypeTagAttr(S, D, Attr); in ProcessDeclAttribute()
5910 handleTypeTagForDatatypeAttr(S, D, Attr); in ProcessDeclAttribute()
5913 handleSimpleAttribute<RenderScriptKernelAttr>(S, D, Attr); in ProcessDeclAttribute()
5917 handleSimpleAttribute<XRayInstrumentAttr>(S, D, Attr); in ProcessDeclAttribute()
5947 if (Attr *A = D->getAttr<ReqdWorkGroupSizeAttr>()) { in ProcessDeclAttributeList()
5952 } else if (Attr *A = D->getAttr<WorkGroupSizeHintAttr>()) { in ProcessDeclAttributeList()
5955 } else if (Attr *A = D->getAttr<VecTypeHintAttr>()) { in ProcessDeclAttributeList()
5958 } else if (Attr *A = D->getAttr<AMDGPUNumVGPRAttr>()) { in ProcessDeclAttributeList()
5962 } else if (Attr *A = D->getAttr<AMDGPUNumSGPRAttr>()) { in ProcessDeclAttributeList()