Lines Matching refs:AL

196 static unsigned getNumAttributeArgs(const ParsedAttr &AL) {  in getNumAttributeArgs()  argument
198 return AL.getNumArgs() + AL.hasParsedType(); in getNumAttributeArgs()
205 getAttrLoc(const AttrInfo &AL) { in getAttrLoc() argument
206 return AL.getLocation(); in getAttrLoc()
208 static SourceLocation getAttrLoc(const ParsedAttr &AL) { return AL.getLoc(); } in getAttrLoc() argument
273 static bool checkAttrMutualExclusion(Sema &S, Decl *D, const ParsedAttr &AL) { in checkAttrMutualExclusion() argument
275 S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << A; in checkAttrMutualExclusion()
283 static bool checkAttrMutualExclusion(Sema &S, Decl *D, const Attr &AL) { in checkAttrMutualExclusion() argument
285 S.Diag(AL.getLocation(), diag::err_attributes_are_not_compatible) << &AL in checkAttrMutualExclusion()
362 bool Sema::checkStringLiteralArgumentAttr(const ParsedAttr &AL, unsigned ArgNum, in checkStringLiteralArgumentAttr() argument
366 if (AL.isArgIdent(ArgNum)) { in checkStringLiteralArgumentAttr()
367 IdentifierLoc *Loc = AL.getArgAsIdent(ArgNum); in checkStringLiteralArgumentAttr()
369 << AL << AANT_ArgumentString in checkStringLiteralArgumentAttr()
379 Expr *ArgExpr = AL.getArgAsExpr(ArgNum); in checkStringLiteralArgumentAttr()
380 return checkStringLiteralArgumentAttr(AL, ArgExpr, Str, ArgLocation); in checkStringLiteralArgumentAttr()
468 const ParsedAttr &AL) { in threadSafetyCheckIsPointer() argument
485 S.Diag(AL.getLoc(), diag::warn_thread_attribute_decl_not_pointer) << AL << QT; in threadSafetyCheckIsPointer()
589 const ParsedAttr &AL, in checkAttrArgsAreCapabilityObjs() argument
593 if (Sidx == AL.getNumArgs()) { in checkAttrArgsAreCapabilityObjs()
603 S.Diag(AL.getLoc(), in checkAttrArgsAreCapabilityObjs()
605 << AL << MD->getParent(); in checkAttrArgsAreCapabilityObjs()
607 S.Diag(AL.getLoc(), diag::warn_thread_attribute_not_on_non_static_member) in checkAttrArgsAreCapabilityObjs()
608 << AL; in checkAttrArgsAreCapabilityObjs()
612 for (unsigned Idx = Sidx; Idx < AL.getNumArgs(); ++Idx) { in checkAttrArgsAreCapabilityObjs()
613 Expr *ArgExp = AL.getArgAsExpr(Idx); in checkAttrArgsAreCapabilityObjs()
632 S.Diag(AL.getLoc(), diag::warn_thread_attribute_ignored) << AL; in checkAttrArgsAreCapabilityObjs()
660 S.Diag(AL.getLoc(), in checkAttrArgsAreCapabilityObjs()
662 << AL << Idx + 1 << NumParams; in checkAttrArgsAreCapabilityObjs()
674 S.Diag(AL.getLoc(), diag::warn_thread_attribute_argument_not_lockable) in checkAttrArgsAreCapabilityObjs()
675 << AL << ArgTy; in checkAttrArgsAreCapabilityObjs()
685 static void handlePtGuardedVarAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handlePtGuardedVarAttr() argument
686 if (!threadSafetyCheckIsPointer(S, D, AL)) in handlePtGuardedVarAttr()
689 D->addAttr(::new (S.Context) PtGuardedVarAttr(S.Context, AL)); in handlePtGuardedVarAttr()
692 static bool checkGuardedByAttrCommon(Sema &S, Decl *D, const ParsedAttr &AL, in checkGuardedByAttrCommon() argument
696 checkAttrArgsAreCapabilityObjs(S, D, AL, Args); in checkGuardedByAttrCommon()
706 static void handleGuardedByAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleGuardedByAttr() argument
708 if (!checkGuardedByAttrCommon(S, D, AL, Arg)) in handleGuardedByAttr()
711 D->addAttr(::new (S.Context) GuardedByAttr(S.Context, AL, Arg)); in handleGuardedByAttr()
714 static void handlePtGuardedByAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handlePtGuardedByAttr() argument
716 if (!checkGuardedByAttrCommon(S, D, AL, Arg)) in handlePtGuardedByAttr()
719 if (!threadSafetyCheckIsPointer(S, D, AL)) in handlePtGuardedByAttr()
722 D->addAttr(::new (S.Context) PtGuardedByAttr(S.Context, AL, Arg)); in handlePtGuardedByAttr()
725 static bool checkAcquireOrderAttrCommon(Sema &S, Decl *D, const ParsedAttr &AL, in checkAcquireOrderAttrCommon() argument
727 if (!AL.checkAtLeastNumArgs(S, 1)) in checkAcquireOrderAttrCommon()
733 S.Diag(AL.getLoc(), diag::warn_thread_attribute_decl_not_lockable) << AL; in checkAcquireOrderAttrCommon()
738 checkAttrArgsAreCapabilityObjs(S, D, AL, Args); in checkAcquireOrderAttrCommon()
745 static void handleAcquiredAfterAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAcquiredAfterAttr() argument
747 if (!checkAcquireOrderAttrCommon(S, D, AL, Args)) in handleAcquiredAfterAttr()
752 AcquiredAfterAttr(S.Context, AL, StartArg, Args.size())); in handleAcquiredAfterAttr()
755 static void handleAcquiredBeforeAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAcquiredBeforeAttr() argument
757 if (!checkAcquireOrderAttrCommon(S, D, AL, Args)) in handleAcquiredBeforeAttr()
762 AcquiredBeforeAttr(S.Context, AL, StartArg, Args.size())); in handleAcquiredBeforeAttr()
765 static bool checkLockFunAttrCommon(Sema &S, Decl *D, const ParsedAttr &AL, in checkLockFunAttrCommon() argument
769 checkAttrArgsAreCapabilityObjs(S, D, AL, Args, 0, /*ParamIdxOk=*/true); in checkLockFunAttrCommon()
774 static void handleAssertSharedLockAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAssertSharedLockAttr() argument
776 if (!checkLockFunAttrCommon(S, D, AL, Args)) in handleAssertSharedLockAttr()
782 AssertSharedLockAttr(S.Context, AL, StartArg, Size)); in handleAssertSharedLockAttr()
786 const ParsedAttr &AL) { in handleAssertExclusiveLockAttr() argument
788 if (!checkLockFunAttrCommon(S, D, AL, Args)) in handleAssertExclusiveLockAttr()
794 AssertExclusiveLockAttr(S.Context, AL, StartArg, Size)); in handleAssertExclusiveLockAttr()
822 static void handleAllocSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAllocSizeAttr() argument
823 if (!AL.checkAtLeastNumArgs(S, 1) || !AL.checkAtMostNumArgs(S, 2)) in handleAllocSizeAttr()
830 S.Diag(AL.getLoc(), diag::warn_attribute_return_pointers_only) << AL; in handleAllocSizeAttr()
834 const Expr *SizeExpr = AL.getArgAsExpr(0); in handleAllocSizeAttr()
837 if (!checkPositiveIntArgument(S, AL, SizeExpr, SizeArgNoVal, /*Idx=*/1)) in handleAllocSizeAttr()
839 if (!checkParamIsIntegerType(S, D, AL, /*AttrArgNo=*/0)) in handleAllocSizeAttr()
844 if (AL.getNumArgs() == 2) { in handleAllocSizeAttr()
845 const Expr *NumberExpr = AL.getArgAsExpr(1); in handleAllocSizeAttr()
848 if (!checkPositiveIntArgument(S, AL, NumberExpr, Val, /*Idx=*/2)) in handleAllocSizeAttr()
850 if (!checkParamIsIntegerType(S, D, AL, /*AttrArgNo=*/1)) in handleAllocSizeAttr()
856 AllocSizeAttr(S.Context, AL, SizeArgNo, NumberArgNo)); in handleAllocSizeAttr()
859 static bool checkTryLockFunAttrCommon(Sema &S, Decl *D, const ParsedAttr &AL, in checkTryLockFunAttrCommon() argument
861 if (!AL.checkAtLeastNumArgs(S, 1)) in checkTryLockFunAttrCommon()
864 if (!isIntOrBool(AL.getArgAsExpr(0))) { in checkTryLockFunAttrCommon()
865 S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) in checkTryLockFunAttrCommon()
866 << AL << 1 << AANT_ArgumentIntOrBool; in checkTryLockFunAttrCommon()
871 checkAttrArgsAreCapabilityObjs(S, D, AL, Args, 1); in checkTryLockFunAttrCommon()
877 const ParsedAttr &AL) { in handleSharedTrylockFunctionAttr() argument
879 if (!checkTryLockFunAttrCommon(S, D, AL, Args)) in handleSharedTrylockFunctionAttr()
883 S.Context, AL, AL.getArgAsExpr(0), Args.data(), Args.size())); in handleSharedTrylockFunctionAttr()
887 const ParsedAttr &AL) { in handleExclusiveTrylockFunctionAttr() argument
889 if (!checkTryLockFunAttrCommon(S, D, AL, Args)) in handleExclusiveTrylockFunctionAttr()
893 S.Context, AL, AL.getArgAsExpr(0), Args.data(), Args.size())); in handleExclusiveTrylockFunctionAttr()
896 static void handleLockReturnedAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleLockReturnedAttr() argument
899 checkAttrArgsAreCapabilityObjs(S, D, AL, Args); in handleLockReturnedAttr()
904 D->addAttr(::new (S.Context) LockReturnedAttr(S.Context, AL, Args[0])); in handleLockReturnedAttr()
907 static void handleLocksExcludedAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleLocksExcludedAttr() argument
908 if (!AL.checkAtLeastNumArgs(S, 1)) in handleLocksExcludedAttr()
913 checkAttrArgsAreCapabilityObjs(S, D, AL, Args); in handleLocksExcludedAttr()
920 LocksExcludedAttr(S.Context, AL, StartArg, Size)); in handleLocksExcludedAttr()
923 static bool checkFunctionConditionAttr(Sema &S, Decl *D, const ParsedAttr &AL, in checkFunctionConditionAttr() argument
925 Cond = AL.getArgAsExpr(0); in checkFunctionConditionAttr()
933 if (!S.checkStringLiteralArgumentAttr(AL, 1, Msg)) in checkFunctionConditionAttr()
943 S.Diag(AL.getLoc(), diag::err_attr_cond_never_constant_expr) << AL; in checkFunctionConditionAttr()
951 static void handleEnableIfAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleEnableIfAttr() argument
952 S.Diag(AL.getLoc(), diag::ext_clang_enable_if); in handleEnableIfAttr()
956 if (checkFunctionConditionAttr(S, D, AL, Cond, Msg)) in handleEnableIfAttr()
957 D->addAttr(::new (S.Context) EnableIfAttr(S.Context, AL, Cond, Msg)); in handleEnableIfAttr()
960 static void handleErrorAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleErrorAttr() argument
962 if (!S.checkStringLiteralArgumentAttr(AL, 0, NewUserDiagnostic)) in handleErrorAttr()
964 if (ErrorAttr *EA = S.mergeErrorAttr(D, AL, NewUserDiagnostic)) in handleErrorAttr()
1015 const ParsedAttr &AL) { in handleDiagnoseAsBuiltinAttr() argument
1020 S.Diag(AL.getLoc(), diag::err_attribute_no_member_function) << AL; in handleDiagnoseAsBuiltinAttr()
1026 auto Union = AL.getArg(Index - 1); in handleDiagnoseAsBuiltinAttr()
1032 S.Diag(Loc, diag::err_attribute_argument_n_type) << AL << Index << T; in handleDiagnoseAsBuiltinAttr()
1036 if (!AL.isArgExpr(0)) in handleDiagnoseAsBuiltinAttr()
1038 auto *F = dyn_cast_or_null<DeclRefExpr>(AL.getArgAsExpr(0)); in handleDiagnoseAsBuiltinAttr()
1049 if (AttrFD->getNumParams() != AL.getNumArgs() - 1) { in handleDiagnoseAsBuiltinAttr()
1050 S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments_for) in handleDiagnoseAsBuiltinAttr()
1051 << AL << AttrFD << AttrFD->getNumParams(); in handleDiagnoseAsBuiltinAttr()
1057 for (unsigned I = 1; I < AL.getNumArgs(); ++I) { in handleDiagnoseAsBuiltinAttr()
1058 if (!AL.isArgExpr(I)) { in handleDiagnoseAsBuiltinAttr()
1063 const Expr *IndexExpr = AL.getArgAsExpr(I); in handleDiagnoseAsBuiltinAttr()
1066 if (!checkUInt32Argument(S, AL, IndexExpr, Index, I + 1, false)) in handleDiagnoseAsBuiltinAttr()
1070 S.Diag(AL.getLoc(), diag::err_attribute_bounds_for_function) in handleDiagnoseAsBuiltinAttr()
1071 << AL << Index << DeclFD << DeclFD->getNumParams(); in handleDiagnoseAsBuiltinAttr()
1081 << AL << Index << DeclFD << T2 << I << AttrFD << T1; in handleDiagnoseAsBuiltinAttr()
1089 S.Context, AL, AttrFD, Indices.data(), Indices.size())); in handleDiagnoseAsBuiltinAttr()
1092 static void handleDiagnoseIfAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleDiagnoseIfAttr() argument
1093 S.Diag(AL.getLoc(), diag::ext_clang_diagnose_if); in handleDiagnoseIfAttr()
1097 if (!checkFunctionConditionAttr(S, D, AL, Cond, Msg)) in handleDiagnoseIfAttr()
1101 if (!S.checkStringLiteralArgumentAttr(AL, 2, DiagTypeStr)) in handleDiagnoseIfAttr()
1106 S.Diag(AL.getArgAsExpr(2)->getBeginLoc(), in handleDiagnoseIfAttr()
1115 S.Context, AL, Cond, Msg, DiagType, ArgDependent, cast<NamedDecl>(D))); in handleDiagnoseIfAttr()
1118 static void handleNoBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleNoBuiltinAttr() argument
1136 if (AL.getNumArgs() == 0) in handleNoBuiltinAttr()
1139 for (unsigned I = 0, E = AL.getNumArgs(); I != E; ++I) { in handleNoBuiltinAttr()
1142 if (!S.checkStringLiteralArgumentAttr(AL, I, BuiltinName, &LiteralLoc)) in handleNoBuiltinAttr()
1149 << BuiltinName << AL; in handleNoBuiltinAttr()
1160 << AL; in handleNoBuiltinAttr()
1165 NoBuiltinAttr(S.Context, AL, Names.data(), Names.size())); in handleNoBuiltinAttr()
1168 static void handlePassObjectSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handlePassObjectSizeAttr() argument
1170 S.Diag(D->getBeginLoc(), diag::err_attribute_only_once_per_parameter) << AL; in handlePassObjectSizeAttr()
1174 Expr *E = AL.getArgAsExpr(0); in handlePassObjectSizeAttr()
1176 if (!checkUInt32Argument(S, AL, E, Type, /*Idx=*/1)) in handlePassObjectSizeAttr()
1184 << AL << 0 << 3 << E->getSourceRange(); in handlePassObjectSizeAttr()
1193 S.Diag(D->getBeginLoc(), diag::err_attribute_pointers_only) << AL << 1; in handlePassObjectSizeAttr()
1197 D->addAttr(::new (S.Context) PassObjectSizeAttr(S.Context, AL, (int)Type)); in handlePassObjectSizeAttr()
1200 static void handleConsumableAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleConsumableAttr() argument
1203 if (AL.isArgIdent(0)) { in handleConsumableAttr()
1204 IdentifierLoc *IL = AL.getArgAsIdent(0); in handleConsumableAttr()
1207 S.Diag(IL->Loc, diag::warn_attribute_type_not_supported) << AL in handleConsumableAttr()
1212 S.Diag(AL.getLoc(), diag::err_attribute_argument_type) in handleConsumableAttr()
1213 << AL << AANT_ArgumentIdentifier; in handleConsumableAttr()
1217 D->addAttr(::new (S.Context) ConsumableAttr(S.Context, AL, DefaultState)); in handleConsumableAttr()
1221 const ParsedAttr &AL) { in checkForConsumableClass() argument
1226 S.Diag(AL.getLoc(), diag::warn_attr_on_unconsumable_class) << RD; in checkForConsumableClass()
1235 static void handleCallableWhenAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleCallableWhenAttr() argument
1236 if (!AL.checkAtLeastNumArgs(S, 1)) in handleCallableWhenAttr()
1239 if (!checkForConsumableClass(S, cast<CXXMethodDecl>(D), AL)) in handleCallableWhenAttr()
1243 for (unsigned ArgIndex = 0; ArgIndex < AL.getNumArgs(); ++ArgIndex) { in handleCallableWhenAttr()
1248 if (AL.isArgIdent(ArgIndex)) { in handleCallableWhenAttr()
1249 IdentifierLoc *Ident = AL.getArgAsIdent(ArgIndex); in handleCallableWhenAttr()
1253 if (!S.checkStringLiteralArgumentAttr(AL, ArgIndex, StateString, &Loc)) in handleCallableWhenAttr()
1259 S.Diag(Loc, diag::warn_attribute_type_not_supported) << AL << StateString; in handleCallableWhenAttr()
1267 CallableWhenAttr(S.Context, AL, States.data(), States.size())); in handleCallableWhenAttr()
1270 static void handleParamTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleParamTypestateAttr() argument
1273 if (AL.isArgIdent(0)) { in handleParamTypestateAttr()
1274 IdentifierLoc *Ident = AL.getArgAsIdent(0); in handleParamTypestateAttr()
1280 << AL << StateString; in handleParamTypestateAttr()
1284 S.Diag(AL.getLoc(), diag::err_attribute_argument_type) in handleParamTypestateAttr()
1285 << AL << AANT_ArgumentIdentifier; in handleParamTypestateAttr()
1301 D->addAttr(::new (S.Context) ParamTypestateAttr(S.Context, AL, ParamState)); in handleParamTypestateAttr()
1304 static void handleReturnTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleReturnTypestateAttr() argument
1307 if (AL.isArgIdent(0)) { in handleReturnTypestateAttr()
1308 IdentifierLoc *IL = AL.getArgAsIdent(0); in handleReturnTypestateAttr()
1311 S.Diag(IL->Loc, diag::warn_attribute_type_not_supported) << AL in handleReturnTypestateAttr()
1316 S.Diag(AL.getLoc(), diag::err_attribute_argument_type) in handleReturnTypestateAttr()
1317 << AL << AANT_ArgumentIdentifier; in handleReturnTypestateAttr()
1346 D->addAttr(::new (S.Context) ReturnTypestateAttr(S.Context, AL, ReturnState)); in handleReturnTypestateAttr()
1349 static void handleSetTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleSetTypestateAttr() argument
1350 if (!checkForConsumableClass(S, cast<CXXMethodDecl>(D), AL)) in handleSetTypestateAttr()
1354 if (AL.isArgIdent(0)) { in handleSetTypestateAttr()
1355 IdentifierLoc *Ident = AL.getArgAsIdent(0); in handleSetTypestateAttr()
1358 S.Diag(Ident->Loc, diag::warn_attribute_type_not_supported) << AL in handleSetTypestateAttr()
1363 S.Diag(AL.getLoc(), diag::err_attribute_argument_type) in handleSetTypestateAttr()
1364 << AL << AANT_ArgumentIdentifier; in handleSetTypestateAttr()
1368 D->addAttr(::new (S.Context) SetTypestateAttr(S.Context, AL, NewState)); in handleSetTypestateAttr()
1371 static void handleTestTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleTestTypestateAttr() argument
1372 if (!checkForConsumableClass(S, cast<CXXMethodDecl>(D), AL)) in handleTestTypestateAttr()
1376 if (AL.isArgIdent(0)) { in handleTestTypestateAttr()
1377 IdentifierLoc *Ident = AL.getArgAsIdent(0); in handleTestTypestateAttr()
1380 S.Diag(Ident->Loc, diag::warn_attribute_type_not_supported) << AL in handleTestTypestateAttr()
1385 S.Diag(AL.getLoc(), diag::err_attribute_argument_type) in handleTestTypestateAttr()
1386 << AL << AANT_ArgumentIdentifier; in handleTestTypestateAttr()
1390 D->addAttr(::new (S.Context) TestTypestateAttr(S.Context, AL, TestState)); in handleTestTypestateAttr()
1393 static void handleExtVectorTypeAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleExtVectorTypeAttr() argument
1398 static void handlePackedAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handlePackedAttr() argument
1400 TD->addAttr(::new (S.Context) PackedAttr(S.Context, AL)); in handlePackedAttr()
1410 S.Diag(AL.getLoc(), diag::warn_attribute_ignored_for_field_of_type) in handlePackedAttr()
1411 << AL << FD->getType(); in handlePackedAttr()
1413 FD->addAttr(::new (S.Context) PackedAttr(S.Context, AL)); in handlePackedAttr()
1417 S.Diag(AL.getLoc(), diag::warn_attribute_packed_for_bitfield); in handlePackedAttr()
1419 FD->addAttr(::new (S.Context) PackedAttr(S.Context, AL)); in handlePackedAttr()
1423 S.Diag(AL.getLoc(), diag::warn_attribute_ignored) << AL; in handlePackedAttr()
1426 static void handlePreferredName(Sema &S, Decl *D, const ParsedAttr &AL) { in handlePreferredName() argument
1431 ParsedType PT = AL.getTypeArg(); in handlePreferredName()
1435 TSI = S.Context.getTrivialTypeSourceInfo(T, AL.getLoc()); in handlePreferredName()
1451 D->addAttr(::new (S.Context) PreferredNameAttr(S.Context, AL, TSI)); in handlePreferredName()
1456 S.Diag(AL.getLoc(), diag::err_attribute_preferred_name_arg_invalid) in handlePreferredName()
1463 static bool checkIBOutletCommon(Sema &S, Decl *D, const ParsedAttr &AL) { in checkIBOutletCommon() argument
1469 S.Diag(AL.getLoc(), diag::warn_iboutlet_object_type) in checkIBOutletCommon()
1470 << AL << VD->getType() << 0; in checkIBOutletCommon()
1476 S.Diag(AL.getLoc(), diag::warn_iboutlet_object_type) in checkIBOutletCommon()
1477 << AL << PD->getType() << 1; in checkIBOutletCommon()
1482 S.Diag(AL.getLoc(), diag::warn_attribute_iboutlet) << AL; in checkIBOutletCommon()
1489 static void handleIBOutlet(Sema &S, Decl *D, const ParsedAttr &AL) { in handleIBOutlet() argument
1490 if (!checkIBOutletCommon(S, D, AL)) in handleIBOutlet()
1493 D->addAttr(::new (S.Context) IBOutletAttr(S.Context, AL)); in handleIBOutlet()
1496 static void handleIBOutletCollection(Sema &S, Decl *D, const ParsedAttr &AL) { in handleIBOutletCollection() argument
1499 if (AL.getNumArgs() > 1) { in handleIBOutletCollection()
1500 S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1; in handleIBOutletCollection()
1504 if (!checkIBOutletCommon(S, D, AL)) in handleIBOutletCollection()
1509 if (AL.hasParsedType()) in handleIBOutletCollection()
1510 PT = AL.getTypeArg(); in handleIBOutletCollection()
1512 PT = S.getTypeName(S.Context.Idents.get("NSObject"), AL.getLoc(), in handleIBOutletCollection()
1515 S.Diag(AL.getLoc(), diag::err_iboutletcollection_type) << "NSObject"; in handleIBOutletCollection()
1523 QTLoc = S.Context.getTrivialTypeSourceInfo(QT, AL.getLoc()); in handleIBOutletCollection()
1530 S.Diag(AL.getLoc(), in handleIBOutletCollection()
1536 D->addAttr(::new (S.Context) IBOutletCollectionAttr(S.Context, AL, QTLoc)); in handleIBOutletCollection()
1563 static bool attrNonNullArgCheck(Sema &S, QualType T, const ParsedAttr &AL, in attrNonNullArgCheck() argument
1569 S.Diag(AL.getLoc(), diag::warn_attribute_return_pointers_only) in attrNonNullArgCheck()
1570 << AL << AttrParmRange << TypeRange; in attrNonNullArgCheck()
1572 S.Diag(AL.getLoc(), diag::warn_attribute_pointers_only) in attrNonNullArgCheck()
1573 << AL << AttrParmRange << TypeRange << 0; in attrNonNullArgCheck()
1579 static void handleNonNullAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleNonNullAttr() argument
1581 for (unsigned I = 0; I < AL.getNumArgs(); ++I) { in handleNonNullAttr()
1582 Expr *Ex = AL.getArgAsExpr(I); in handleNonNullAttr()
1584 if (!checkFunctionOrMethodParameterIndex(S, D, AL, I + 1, Ex, Idx)) in handleNonNullAttr()
1590 S, getFunctionOrMethodParamType(D, Idx.getASTIndex()), AL, in handleNonNullAttr()
1602 if (NonNullArgs.empty() && AL.getLoc().isFileID() && in handleNonNullAttr()
1613 S.Diag(AL.getLoc(), diag::warn_attribute_nonnull_no_pointers); in handleNonNullAttr()
1619 D->addAttr(::new (S.Context) NonNullAttr(S.Context, AL, Start, Size)); in handleNonNullAttr()
1623 const ParsedAttr &AL) { in handleNonNullAttrParameter() argument
1624 if (AL.getNumArgs() > 0) { in handleNonNullAttrParameter()
1626 handleNonNullAttr(S, D, AL); in handleNonNullAttrParameter()
1628 S.Diag(AL.getLoc(), diag::warn_attribute_nonnull_parm_no_args) in handleNonNullAttrParameter()
1635 if (!attrNonNullArgCheck(S, D->getType(), AL, SourceRange(), in handleNonNullAttrParameter()
1639 D->addAttr(::new (S.Context) NonNullAttr(S.Context, AL, nullptr, 0)); in handleNonNullAttrParameter()
1642 static void handleReturnsNonNullAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleReturnsNonNullAttr() argument
1645 if (!attrNonNullArgCheck(S, ResultType, AL, SourceRange(), SR, in handleReturnsNonNullAttr()
1649 D->addAttr(::new (S.Context) ReturnsNonNullAttr(S.Context, AL)); in handleReturnsNonNullAttr()
1652 static void handleNoEscapeAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleNoEscapeAttr() argument
1659 S.Diag(AL.getLoc(), diag::warn_attribute_pointers_only) in handleNoEscapeAttr()
1660 << AL << AL.getRange() << 0; in handleNoEscapeAttr()
1664 D->addAttr(::new (S.Context) NoEscapeAttr(S.Context, AL)); in handleNoEscapeAttr()
1667 static void handleAssumeAlignedAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAssumeAlignedAttr() argument
1668 Expr *E = AL.getArgAsExpr(0), in handleAssumeAlignedAttr()
1669 *OE = AL.getNumArgs() > 1 ? AL.getArgAsExpr(1) : nullptr; in handleAssumeAlignedAttr()
1670 S.AddAssumeAlignedAttr(D, AL, E, OE); in handleAssumeAlignedAttr()
1673 static void handleAllocAlignAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAllocAlignAttr() argument
1674 S.AddAllocAlignAttr(D, AL, AL.getArgAsExpr(0)); in handleAllocAlignAttr()
1782 static void handleAssumumptionAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAssumumptionAttr() argument
1786 if (!S.checkStringLiteralArgumentAttr(AL, 0, Str, &AttrStrLoc)) in handleAssumumptionAttr()
1791 D->addAttr(::new (S.Context) AssumptionAttr(S.Context, AL, Str)); in handleAssumumptionAttr()
1805 static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleOwnershipAttr() argument
1814 if (!AL.isArgIdent(0)) { in handleOwnershipAttr()
1815 S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) in handleOwnershipAttr()
1816 << AL << 1 << AANT_ArgumentIdentifier; in handleOwnershipAttr()
1822 OwnershipAttr(S.Context, AL, nullptr, nullptr, 0).getOwnKind(); in handleOwnershipAttr()
1828 if (AL.getNumArgs() < 2) { in handleOwnershipAttr()
1829 S.Diag(AL.getLoc(), diag::err_attribute_too_few_arguments) << AL << 2; in handleOwnershipAttr()
1834 if (AL.getNumArgs() > 2) { in handleOwnershipAttr()
1835 S.Diag(AL.getLoc(), diag::err_attribute_too_many_arguments) << AL << 1; in handleOwnershipAttr()
1841 IdentifierInfo *Module = AL.getArgAsIdent(0)->Ident; in handleOwnershipAttr()
1849 for (unsigned i = 1; i < AL.getNumArgs(); ++i) { in handleOwnershipAttr()
1850 Expr *Ex = AL.getArgAsExpr(i); in handleOwnershipAttr()
1852 if (!checkFunctionOrMethodParameterIndex(S, D, AL, i, Ex, Idx)) in handleOwnershipAttr()
1870 S.Diag(AL.getLoc(), diag::err_ownership_type) << AL << Err in handleOwnershipAttr()
1881 S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << I; in handleOwnershipAttr()
1891 S.Diag(AL.getLoc(), diag::note_ownership_returns_index_mismatch) in handleOwnershipAttr()
1904 OwnershipAttr(S.Context, AL, Module, Start, Size)); in handleOwnershipAttr()
1907 static void handleWeakRefAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleWeakRefAttr() argument
1909 if (AL.getNumArgs() > 1) { in handleWeakRefAttr()
1910 S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1; in handleWeakRefAttr()
1926 S.Diag(AL.getLoc(), diag::err_attribute_weakref_not_global_context) in handleWeakRefAttr()
1957 if (AL.getNumArgs() && S.checkStringLiteralArgumentAttr(AL, 0, Str)) in handleWeakRefAttr()
1960 D->addAttr(::new (S.Context) AliasAttr(S.Context, AL, Str)); in handleWeakRefAttr()
1962 D->addAttr(::new (S.Context) WeakRefAttr(S.Context, AL)); in handleWeakRefAttr()
1965 static void handleIFuncAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleIFuncAttr() argument
1967 if (!S.checkStringLiteralArgumentAttr(AL, 0, Str)) in handleIFuncAttr()
1973 S.Diag(AL.getLoc(), diag::err_alias_is_definition) << FD << 1; in handleIFuncAttr()
1977 D->addAttr(::new (S.Context) IFuncAttr(S.Context, AL, Str)); in handleIFuncAttr()
1980 static void handleAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAliasAttr() argument
1982 if (!S.checkStringLiteralArgumentAttr(AL, 0, Str)) in handleAliasAttr()
1986 S.Diag(AL.getLoc(), diag::err_alias_not_supported_on_darwin); in handleAliasAttr()
1990 S.Diag(AL.getLoc(), diag::err_alias_not_supported_on_nvptx); in handleAliasAttr()
1996 S.Diag(AL.getLoc(), diag::err_alias_is_definition) << FD << 0; in handleAliasAttr()
2002 S.Diag(AL.getLoc(), diag::err_alias_is_definition) << VD << 0; in handleAliasAttr()
2011 const DeclarationNameInfo target(&S.Context.Idents.get(Str), AL.getLoc()); in handleAliasAttr()
2018 D->addAttr(::new (S.Context) AliasAttr(S.Context, AL, Str)); in handleAliasAttr()
2021 static void handleTLSModelAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleTLSModelAttr() argument
2025 if (!S.checkStringLiteralArgumentAttr(AL, 0, Model, &LiteralLoc)) in handleTLSModelAttr()
2041 D->addAttr(::new (S.Context) TLSModelAttr(S.Context, AL, Model)); in handleTLSModelAttr()
2044 static void handleRestrictAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleRestrictAttr() argument
2047 D->addAttr(::new (S.Context) RestrictAttr(S.Context, AL)); in handleRestrictAttr()
2051 S.Diag(AL.getLoc(), diag::warn_attribute_return_pointers_only) in handleRestrictAttr()
2052 << AL << getFunctionOrMethodResultSourceRange(D); in handleRestrictAttr()
2055 static void handleCPUSpecificAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleCPUSpecificAttr() argument
2058 if (AL.getParsedKind() == ParsedAttr::AT_CPUDispatch) { in handleCPUSpecificAttr()
2059 if (checkAttrMutualExclusion<CPUSpecificAttr>(S, D, AL)) in handleCPUSpecificAttr()
2063 S.Diag(AL.getLoc(), diag::err_disallowed_duplicate_attribute) << AL; in handleCPUSpecificAttr()
2067 } else if (AL.getParsedKind() == ParsedAttr::AT_CPUSpecific) { in handleCPUSpecificAttr()
2068 if (checkAttrMutualExclusion<CPUDispatchAttr>(S, D, AL)) in handleCPUSpecificAttr()
2072 S.Diag(AL.getLoc(), diag::err_disallowed_duplicate_attribute) << AL; in handleCPUSpecificAttr()
2082 S.Diag(AL.getLoc(), diag::err_attribute_dll_lambda) << AL; in handleCPUSpecificAttr()
2087 if (!AL.checkAtLeastNumArgs(S, 1)) in handleCPUSpecificAttr()
2091 for (unsigned ArgNo = 0; ArgNo < getNumAttributeArgs(AL); ++ArgNo) { in handleCPUSpecificAttr()
2092 if (!AL.isArgIdent(ArgNo)) { in handleCPUSpecificAttr()
2093 S.Diag(AL.getLoc(), diag::err_attribute_argument_type) in handleCPUSpecificAttr()
2094 << AL << AANT_ArgumentIdentifier; in handleCPUSpecificAttr()
2098 IdentifierLoc *CPUArg = AL.getArgAsIdent(ArgNo); in handleCPUSpecificAttr()
2103 << CPUName << (AL.getKind() == ParsedAttr::AT_CPUDispatch); in handleCPUSpecificAttr()
2112 S.Diag(AL.getLoc(), diag::warn_multiversion_duplicate_entries); in handleCPUSpecificAttr()
2119 if (AL.getKind() == ParsedAttr::AT_CPUSpecific) in handleCPUSpecificAttr()
2121 CPUSpecificAttr(S.Context, AL, CPUs.data(), CPUs.size())); in handleCPUSpecificAttr()
2124 CPUDispatchAttr(S.Context, AL, CPUs.data(), CPUs.size())); in handleCPUSpecificAttr()
2127 static void handleCommonAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleCommonAttr() argument
2129 S.Diag(AL.getLoc(), diag::err_attribute_not_supported_in_lang) in handleCommonAttr()
2130 << AL << AttributeLangSupport::Cpp; in handleCommonAttr()
2134 D->addAttr(::new (S.Context) CommonAttr(S.Context, AL)); in handleCommonAttr()
2137 static void handleCmseNSEntryAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleCmseNSEntryAttr() argument
2139 S.Diag(AL.getLoc(), diag::err_attribute_not_clinkage) << AL; in handleCmseNSEntryAttr()
2145 S.Diag(AL.getLoc(), diag::warn_attribute_cmse_entry_static); in handleCmseNSEntryAttr()
2149 D->addAttr(::new (S.Context) CmseNSEntryAttr(S.Context, AL)); in handleCmseNSEntryAttr()
2152 static void handleNakedAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleNakedAttr() argument
2153 if (AL.isDeclspecAttribute()) { in handleNakedAttr()
2158 S.Diag(AL.getLoc(), diag::err_attribute_not_supported_on_arch) in handleNakedAttr()
2159 << AL << Triple.getArchName(); in handleNakedAttr()
2166 S.Diag(AL.getLoc(), diag::err_attribute_wrong_decl_type_str) in handleNakedAttr()
2167 << AL << "non-member functions"; in handleNakedAttr()
2172 D->addAttr(::new (S.Context) NakedAttr(S.Context, AL)); in handleNakedAttr()
2218 bool Sema::CheckAttrTarget(const ParsedAttr &AL) { in CheckAttrTarget() argument
2220 if (!AL.existsInTarget(Context.getTargetInfo())) { in CheckAttrTarget()
2221 Diag(AL.getLoc(), diag::warn_unknown_attribute_ignored) in CheckAttrTarget()
2222 << AL << AL.getRange(); in CheckAttrTarget()
2223 AL.setInvalid(); in CheckAttrTarget()
2230 static void handleAnalyzerNoReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAnalyzerNoReturnAttr() argument
2238 S.Diag(AL.getLoc(), AL.isStandardAttributeSyntax() in handleAnalyzerNoReturnAttr()
2241 << AL << ExpectedFunctionMethodOrBlock; in handleAnalyzerNoReturnAttr()
2246 D->addAttr(::new (S.Context) AnalyzerNoReturnAttr(S.Context, AL)); in handleAnalyzerNoReturnAttr()
2250 static void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleVecReturnAttr() argument
2276 S.Diag(AL.getLoc(), diag::err_repeat_attribute) << A; in handleVecReturnAttr()
2284 S.Diag(AL.getLoc(), diag::err_attribute_vecreturn_only_vector_member); in handleVecReturnAttr()
2289 S.Diag(AL.getLoc(), diag::err_attribute_vecreturn_only_pod_record); in handleVecReturnAttr()
2295 S.Diag(AL.getLoc(), diag::err_attribute_vecreturn_only_vector_member); in handleVecReturnAttr()
2301 D->addAttr(::new (S.Context) VecReturnAttr(S.Context, AL)); in handleVecReturnAttr()
2305 const ParsedAttr &AL) { in handleDependencyAttr() argument
2310 S.Diag(AL.getLoc(), in handleDependencyAttr()
2316 D->addAttr(::new (S.Context) CarriesDependencyAttr(S.Context, AL)); in handleDependencyAttr()
2319 static void handleUnusedAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleUnusedAttr() argument
2320 bool IsCXX17Attr = AL.isCXX11Attribute() && !AL.getScopeName(); in handleUnusedAttr()
2325 S.Diag(AL.getLoc(), diag::ext_cxx17_attr) << AL; in handleUnusedAttr()
2327 D->addAttr(::new (S.Context) UnusedAttr(S.Context, AL)); in handleUnusedAttr()
2330 static void handleConstructorAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleConstructorAttr() argument
2332 if (AL.getNumArgs() && in handleConstructorAttr()
2333 !checkUInt32Argument(S, AL, AL.getArgAsExpr(0), priority)) in handleConstructorAttr()
2336 D->addAttr(::new (S.Context) ConstructorAttr(S.Context, AL, priority)); in handleConstructorAttr()
2339 static void handleDestructorAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleDestructorAttr() argument
2341 if (AL.getNumArgs() && in handleDestructorAttr()
2342 !checkUInt32Argument(S, AL, AL.getArgAsExpr(0), priority)) in handleDestructorAttr()
2345 D->addAttr(::new (S.Context) DestructorAttr(S.Context, AL, priority)); in handleDestructorAttr()
2349 static void handleAttrWithMessage(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAttrWithMessage() argument
2352 if (AL.getNumArgs() == 1 && !S.checkStringLiteralArgumentAttr(AL, 0, Str)) in handleAttrWithMessage()
2355 D->addAttr(::new (S.Context) AttrTy(S.Context, AL, Str)); in handleAttrWithMessage()
2359 const ParsedAttr &AL) { in handleObjCSuppresProtocolAttr() argument
2361 S.Diag(AL.getLoc(), diag::err_objc_attr_protocol_requires_definition) in handleObjCSuppresProtocolAttr()
2362 << AL << AL.getRange(); in handleObjCSuppresProtocolAttr()
2366 D->addAttr(::new (S.Context) ObjCExplicitProtocolImplAttr(S.Context, AL)); in handleObjCSuppresProtocolAttr()
2590 static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAvailabilityAttr() argument
2593 S.Diag(AL.getRange().getBegin(), diag::warn_deprecated_ignored_on_using) in handleAvailabilityAttr()
2594 << AL; in handleAvailabilityAttr()
2598 if (!AL.checkExactlyNumArgs(S, 1)) in handleAvailabilityAttr()
2600 IdentifierLoc *Platform = AL.getArgAsIdent(0); in handleAvailabilityAttr()
2611 AvailabilityChange Introduced = AL.getAvailabilityIntroduced(); in handleAvailabilityAttr()
2612 AvailabilityChange Deprecated = AL.getAvailabilityDeprecated(); in handleAvailabilityAttr()
2613 AvailabilityChange Obsoleted = AL.getAvailabilityObsoleted(); in handleAvailabilityAttr()
2614 bool IsUnavailable = AL.getUnavailableLoc().isValid(); in handleAvailabilityAttr()
2615 bool IsStrict = AL.getStrictLoc().isValid(); in handleAvailabilityAttr()
2617 if (const auto *SE = dyn_cast_or_null<StringLiteral>(AL.getMessageExpr())) in handleAvailabilityAttr()
2620 if (const auto *SE = dyn_cast_or_null<StringLiteral>(AL.getReplacementExpr())) in handleAvailabilityAttr()
2626 S.Diag(AL.getLoc(), in handleAvailabilityAttr()
2636 S.Diag(AL.getLoc(), diag::warn_availability_fuchsia_unavailable_minor); in handleAvailabilityAttr()
2641 int PriorityModifier = AL.isPragmaClangAttribute() in handleAvailabilityAttr()
2645 ND, AL, II, false /*Implicit*/, Introduced.Version, Deprecated.Version, in handleAvailabilityAttr()
2701 ND, AL, NewII, true /*Implicit*/, NewIntroduced, NewDeprecated, in handleAvailabilityAttr()
2743 ND, AL, NewII, true /*Implicit*/, NewIntroduced, NewDeprecated, in handleAvailabilityAttr()
2754 return S.getDarwinSDKInfoForAvailabilityChecking(AL.getRange().getBegin(), in handleAvailabilityAttr()
2774 ND, AL.getRange(), NewII, true /*Implicit*/, in handleAvailabilityAttr()
2815 ND, AL.getRange(), NewII, true /*Implicit*/, in handleAvailabilityAttr()
2831 const ParsedAttr &AL) { in handleExternalSourceSymbolAttr() argument
2832 if (!AL.checkAtLeastNumArgs(S, 1) || !AL.checkAtMostNumArgs(S, 3)) in handleExternalSourceSymbolAttr()
2836 if (const auto *SE = dyn_cast_or_null<StringLiteral>(AL.getArgAsExpr(0))) in handleExternalSourceSymbolAttr()
2839 if (const auto *SE = dyn_cast_or_null<StringLiteral>(AL.getArgAsExpr(1))) in handleExternalSourceSymbolAttr()
2841 bool IsGeneratedDeclaration = AL.getArgAsIdent(2) != nullptr; in handleExternalSourceSymbolAttr()
2844 S.Context, AL, Language, DefinedIn, IsGeneratedDeclaration)); in handleExternalSourceSymbolAttr()
2874 static void handleVisibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL, in handleVisibilityAttr() argument
2878 S.Diag(AL.getRange().getBegin(), diag::warn_attribute_ignored) << AL; in handleVisibilityAttr()
2887 S.Diag(AL.getRange().getBegin(), diag::err_attribute_wrong_decl_type) in handleVisibilityAttr()
2888 << AL << ExpectedTypeOrNamespace; in handleVisibilityAttr()
2895 if (!S.checkStringLiteralArgumentAttr(AL, 0, TypeStr, &LiteralLoc)) in handleVisibilityAttr()
2900 S.Diag(LiteralLoc, diag::warn_attribute_type_not_supported) << AL in handleVisibilityAttr()
2909 S.Diag(AL.getLoc(), diag::warn_attribute_protected_visibility); in handleVisibilityAttr()
2916 D, AL, (TypeVisibilityAttr::VisibilityType)type); in handleVisibilityAttr()
2918 newAttr = S.mergeVisibilityAttr(D, AL, type); in handleVisibilityAttr()
2924 static void handleObjCDirectAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleObjCDirectAttr() argument
2927 S.Diag(AL.getLoc(), diag::err_objc_direct_on_protocol) << false; in handleObjCDirectAttr()
2932 handleSimpleAttribute<ObjCDirectAttr>(S, D, AL); in handleObjCDirectAttr()
2934 S.Diag(AL.getLoc(), diag::warn_objc_direct_ignored) << AL; in handleObjCDirectAttr()
2939 const ParsedAttr &AL) { in handleObjCDirectMembersAttr() argument
2941 handleSimpleAttribute<ObjCDirectMembersAttr>(S, D, AL); in handleObjCDirectMembersAttr()
2943 S.Diag(AL.getLoc(), diag::warn_objc_direct_ignored) << AL; in handleObjCDirectMembersAttr()
2947 static void handleObjCMethodFamilyAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleObjCMethodFamilyAttr() argument
2949 if (!AL.isArgIdent(0)) { in handleObjCMethodFamilyAttr()
2950 S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) in handleObjCMethodFamilyAttr()
2951 << AL << 1 << AANT_ArgumentIdentifier; in handleObjCMethodFamilyAttr()
2955 IdentifierLoc *IL = AL.getArgAsIdent(0); in handleObjCMethodFamilyAttr()
2958 S.Diag(IL->Loc, diag::warn_attribute_type_not_supported) << AL << IL->Ident; in handleObjCMethodFamilyAttr()
2970 D->addAttr(new (S.Context) ObjCMethodFamilyAttr(S.Context, AL, F)); in handleObjCMethodFamilyAttr()
2973 static void handleObjCNSObject(Sema &S, Decl *D, const ParsedAttr &AL) { in handleObjCNSObject() argument
2997 D->addAttr(::new (S.Context) ObjCNSObjectAttr(S.Context, AL)); in handleObjCNSObject()
3000 static void handleObjCIndependentClass(Sema &S, Decl *D, const ParsedAttr &AL) { in handleObjCIndependentClass() argument
3011 D->addAttr(::new (S.Context) ObjCIndependentClassAttr(S.Context, AL)); in handleObjCIndependentClass()
3014 static void handleBlocksAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleBlocksAttr() argument
3015 if (!AL.isArgIdent(0)) { in handleBlocksAttr()
3016 S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) in handleBlocksAttr()
3017 << AL << 1 << AANT_ArgumentIdentifier; in handleBlocksAttr()
3021 IdentifierInfo *II = AL.getArgAsIdent(0)->Ident; in handleBlocksAttr()
3024 S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II; in handleBlocksAttr()
3028 D->addAttr(::new (S.Context) BlocksAttr(S.Context, AL, type)); in handleBlocksAttr()
3031 static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleSentinelAttr() argument
3033 if (AL.getNumArgs() > 0) { in handleSentinelAttr()
3034 Expr *E = AL.getArgAsExpr(0); in handleSentinelAttr()
3037 S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) in handleSentinelAttr()
3038 << AL << 1 << AANT_ArgumentIntegerConstant << E->getSourceRange(); in handleSentinelAttr()
3043 S.Diag(AL.getLoc(), diag::err_attribute_sentinel_less_than_zero) in handleSentinelAttr()
3052 if (AL.getNumArgs() > 1) { in handleSentinelAttr()
3053 Expr *E = AL.getArgAsExpr(1); in handleSentinelAttr()
3056 S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) in handleSentinelAttr()
3057 << AL << 2 << AANT_ArgumentIntegerConstant << E->getSourceRange(); in handleSentinelAttr()
3065 S.Diag(AL.getLoc(), diag::err_attribute_sentinel_not_zero_or_one) in handleSentinelAttr()
3074 S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_named_arguments); in handleSentinelAttr()
3079 S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_not_variadic) << 0; in handleSentinelAttr()
3084 S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_not_variadic) << 0; in handleSentinelAttr()
3089 S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_not_variadic) << 1; in handleSentinelAttr()
3102 S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_not_variadic) << m; in handleSentinelAttr()
3106 S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) in handleSentinelAttr()
3107 << AL << ExpectedFunctionMethodOrBlock; in handleSentinelAttr()
3111 S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) in handleSentinelAttr()
3112 << AL << ExpectedFunctionMethodOrBlock; in handleSentinelAttr()
3115 D->addAttr(::new (S.Context) SentinelAttr(S.Context, AL, sentinel, nullPos)); in handleSentinelAttr()
3118 static void handleWarnUnusedResult(Sema &S, Decl *D, const ParsedAttr &AL) { in handleWarnUnusedResult() argument
3122 S.Diag(AL.getLoc(), diag::warn_attribute_void_function_method) << AL << 0; in handleWarnUnusedResult()
3127 S.Diag(AL.getLoc(), diag::warn_attribute_void_function_method) << AL << 1; in handleWarnUnusedResult()
3132 if (AL.isStandardAttributeSyntax() && !AL.getScopeName()) { in handleWarnUnusedResult()
3136 S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type_str) in handleWarnUnusedResult()
3137 << AL << "functions, classes, or enumerations"; in handleWarnUnusedResult()
3145 if (AL.getNumArgs() == 1) { in handleWarnUnusedResult()
3147 S.Diag(AL.getLoc(), diag::ext_cxx20_attr) << AL; in handleWarnUnusedResult()
3153 if (!S.checkStringLiteralArgumentAttr(AL, 0, Str, nullptr)) in handleWarnUnusedResult()
3156 S.Diag(AL.getLoc(), diag::ext_cxx17_attr) << AL; in handleWarnUnusedResult()
3159 if ((!AL.isGNUAttribute() && in handleWarnUnusedResult()
3160 !(AL.isStandardAttributeSyntax() && AL.isClangScope())) && in handleWarnUnusedResult()
3162 S.Diag(AL.getLoc(), diag::warn_unused_result_typedef_unsupported_spelling) in handleWarnUnusedResult()
3163 << AL.isGNUScope(); in handleWarnUnusedResult()
3167 D->addAttr(::new (S.Context) WarnUnusedResultAttr(S.Context, AL, Str)); in handleWarnUnusedResult()
3170 static void handleWeakImportAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleWeakImportAttr() argument
3175 S.Diag(AL.getLoc(), diag::warn_attribute_invalid_on_definition) in handleWeakImportAttr()
3182 S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) in handleWeakImportAttr()
3183 << AL << ExpectedVariableOrFunction; in handleWeakImportAttr()
3188 D->addAttr(::new (S.Context) WeakImportAttr(S.Context, AL)); in handleWeakImportAttr()
3193 static void handleWorkGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) { in handleWorkGroupSize() argument
3196 const Expr *E = AL.getArgAsExpr(i); in handleWorkGroupSize()
3197 if (!checkUInt32Argument(S, AL, E, WGSize[i], i, in handleWorkGroupSize()
3201 S.Diag(AL.getLoc(), diag::err_attribute_argument_is_zero) in handleWorkGroupSize()
3202 << AL << E->getSourceRange(); in handleWorkGroupSize()
3211 S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL; in handleWorkGroupSize()
3214 WorkGroupAttr(S.Context, AL, WGSize[0], WGSize[1], WGSize[2])); in handleWorkGroupSize()
3218 static void handleSubGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) { in handleSubGroupSize() argument
3220 const Expr *E = AL.getArgAsExpr(0); in handleSubGroupSize()
3221 if (!checkUInt32Argument(S, AL, E, SGSize)) in handleSubGroupSize()
3224 S.Diag(AL.getLoc(), diag::err_attribute_argument_is_zero) in handleSubGroupSize()
3225 << AL << E->getSourceRange(); in handleSubGroupSize()
3232 S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL; in handleSubGroupSize()
3235 OpenCLIntelReqdSubGroupSizeAttr(S.Context, AL, SGSize)); in handleSubGroupSize()
3238 static void handleVecTypeHint(Sema &S, Decl *D, const ParsedAttr &AL) { in handleVecTypeHint() argument
3239 if (!AL.hasParsedType()) { in handleVecTypeHint()
3240 S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1; in handleVecTypeHint()
3245 QualType ParmType = S.GetTypeFromParser(AL.getTypeArg(), &ParmTSI); in handleVecTypeHint()
3251 S.Diag(AL.getLoc(), diag::err_attribute_invalid_argument) << 2 << AL; in handleVecTypeHint()
3257 S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL; in handleVecTypeHint()
3262 D->addAttr(::new (S.Context) VecTypeHintAttr(S.Context, AL, ParmTSI)); in handleVecTypeHint()
3315 static void handleSectionAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleSectionAttr() argument
3320 if (!S.checkStringLiteralArgumentAttr(AL, 0, Str, &LiteralLoc)) in handleSectionAttr()
3326 SectionAttr *NewAttr = S.mergeSectionAttr(D, AL, Str); in handleSectionAttr()
3369 static void handleCodeSegAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleCodeSegAttr() argument
3372 if (!S.checkStringLiteralArgumentAttr(AL, 0, Str, &LiteralLoc)) in handleCodeSegAttr()
3378 S.Diag(AL.getLoc(), in handleCodeSegAttr()
3386 if (CodeSegAttr *CSA = S.mergeCodeSegAttr(D, AL, Str)) in handleCodeSegAttr()
3451 static void handleTargetAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleTargetAttr() argument
3454 if (!S.checkStringLiteralArgumentAttr(AL, 0, Str, &LiteralLoc) || in handleTargetAttr()
3458 TargetAttr *NewAttr = ::new (S.Context) TargetAttr(S.Context, AL, Str); in handleTargetAttr()
3513 static void handleTargetClonesAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleTargetClonesAttr() argument
3517 S.Diag(AL.getLoc(), diag::err_disallowed_duplicate_attribute) << AL; in handleTargetClonesAttr()
3521 if (checkAttrMutualExclusion<TargetClonesAttr>(S, D, AL)) in handleTargetClonesAttr()
3527 for (unsigned I = 0, E = AL.getNumArgs(); I != E; ++I) { in handleTargetClonesAttr()
3530 if (!S.checkStringLiteralArgumentAttr(AL, I, CurStr, &LiteralLoc) || in handleTargetClonesAttr()
3533 cast<StringLiteral>(AL.getArgAsExpr(I)->IgnoreParenCasts()), in handleTargetClonesAttr()
3538 if (HasCommas && AL.getNumArgs() > 1) in handleTargetClonesAttr()
3539 S.Diag(AL.getLoc(), diag::warn_target_clone_mixed_values); in handleTargetClonesAttr()
3542 S.Diag(AL.getLoc(), diag::err_target_clone_must_have_default); in handleTargetClonesAttr()
3559 TargetClonesAttr(S.Context, AL, Strings.data(), Strings.size()); in handleTargetClonesAttr()
3563 static void handleMinVectorWidthAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleMinVectorWidthAttr() argument
3564 Expr *E = AL.getArgAsExpr(0); in handleMinVectorWidthAttr()
3566 if (!checkUInt32Argument(S, AL, E, VecWidth)) { in handleMinVectorWidthAttr()
3567 AL.setInvalid(); in handleMinVectorWidthAttr()
3573 S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL; in handleMinVectorWidthAttr()
3577 D->addAttr(::new (S.Context) MinVectorWidthAttr(S.Context, AL, VecWidth)); in handleMinVectorWidthAttr()
3580 static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleCleanupAttr() argument
3581 Expr *E = AL.getArgAsExpr(0); in handleCleanupAttr()
3632 D->addAttr(::new (S.Context) CleanupAttr(S.Context, AL, FD)); in handleCleanupAttr()
3636 const ParsedAttr &AL) { in handleEnumExtensibilityAttr() argument
3637 if (!AL.isArgIdent(0)) { in handleEnumExtensibilityAttr()
3638 S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) in handleEnumExtensibilityAttr()
3639 << AL << 0 << AANT_ArgumentIdentifier; in handleEnumExtensibilityAttr()
3644 IdentifierInfo *II = AL.getArgAsIdent(0)->Ident; in handleEnumExtensibilityAttr()
3647 S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II; in handleEnumExtensibilityAttr()
3652 EnumExtensibilityAttr(S.Context, AL, ExtensibilityKind)); in handleEnumExtensibilityAttr()
3657 static void handleFormatArgAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleFormatArgAttr() argument
3658 Expr *IdxExpr = AL.getArgAsExpr(0); in handleFormatArgAttr()
3660 if (!checkFunctionOrMethodParameterIndex(S, D, AL, 1, IdxExpr, Idx)) in handleFormatArgAttr()
3671 S.Diag(AL.getLoc(), diag::err_format_attribute_not) in handleFormatArgAttr()
3687 S.Diag(AL.getLoc(), diag::err_format_attribute_result_not) in handleFormatArgAttr()
3693 D->addAttr(::new (S.Context) FormatArgAttr(S.Context, AL, Idx)); in handleFormatArgAttr()
3728 static void handleInitPriorityAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleInitPriorityAttr() argument
3730 S.Diag(AL.getLoc(), diag::warn_attribute_ignored) << AL; in handleInitPriorityAttr()
3735 S.Diag(AL.getLoc(), diag::err_init_priority_object_attr); in handleInitPriorityAttr()
3736 AL.setInvalid(); in handleInitPriorityAttr()
3743 S.Diag(AL.getLoc(), diag::err_init_priority_object_attr); in handleInitPriorityAttr()
3744 AL.setInvalid(); in handleInitPriorityAttr()
3748 Expr *E = AL.getArgAsExpr(0); in handleInitPriorityAttr()
3750 if (!checkUInt32Argument(S, AL, E, prioritynum)) { in handleInitPriorityAttr()
3751 AL.setInvalid(); in handleInitPriorityAttr()
3759 !S.getSourceManager().isInSystemHeader(AL.getLoc())) { in handleInitPriorityAttr()
3760 S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_range) in handleInitPriorityAttr()
3761 << E->getSourceRange() << AL << 101 << 65535; in handleInitPriorityAttr()
3762 AL.setInvalid(); in handleInitPriorityAttr()
3765 D->addAttr(::new (S.Context) InitPriorityAttr(S.Context, AL, prioritynum)); in handleInitPriorityAttr()
3812 static void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleFormatAttr() argument
3813 if (!AL.isArgIdent(0)) { in handleFormatAttr()
3814 S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) in handleFormatAttr()
3815 << AL << 1 << AANT_ArgumentIdentifier; in handleFormatAttr()
3824 IdentifierInfo *II = AL.getArgAsIdent(0)->Ident; in handleFormatAttr()
3839 S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) in handleFormatAttr()
3840 << AL << II->getName(); in handleFormatAttr()
3845 Expr *IdxExpr = AL.getArgAsExpr(1); in handleFormatAttr()
3847 if (!checkUInt32Argument(S, AL, IdxExpr, Idx, 2)) in handleFormatAttr()
3851 S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) in handleFormatAttr()
3852 << AL << 2 << IdxExpr->getSourceRange(); in handleFormatAttr()
3861 S.Diag(AL.getLoc(), in handleFormatAttr()
3876 S.Diag(AL.getLoc(), diag::err_format_attribute_not) in handleFormatAttr()
3882 Expr *FirstArgExpr = AL.getArgAsExpr(2); in handleFormatAttr()
3884 if (!checkUInt32Argument(S, AL, FirstArgExpr, FirstArg, 3)) in handleFormatAttr()
3892 S.Diag(D->getLocation(), diag::warn_gcc_requires_variadic_function) << AL; in handleFormatAttr()
3899 S.Diag(AL.getLoc(), diag::err_format_strftime_third_parameter) in handleFormatAttr()
3905 S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) in handleFormatAttr()
3906 << AL << 3 << FirstArgExpr->getSourceRange(); in handleFormatAttr()
3910 FormatAttr *NewAttr = S.mergeFormatAttr(D, AL, II, Idx, FirstArg); in handleFormatAttr()
3916 static void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleCallbackAttr() argument
3918 if (AL.getNumArgs() == 0) { in handleCallbackAttr()
3919 S.Diag(AL.getLoc(), diag::err_callback_attribute_no_callee) in handleCallbackAttr()
3920 << AL.getRange(); in handleCallbackAttr()
3942 for (unsigned I = 0, E = AL.getNumArgs(); I < E; ++I) { in handleCallbackAttr()
3946 if (AL.isArgIdent(I)) { in handleCallbackAttr()
3947 IdentifierLoc *IdLoc = AL.getArgAsIdent(I); in handleCallbackAttr()
3950 S.Diag(AL.getLoc(), diag::err_callback_attribute_argument_unknown) in handleCallbackAttr()
3957 } else if (AL.isArgExpr(I)) { in handleCallbackAttr()
3958 Expr *IdxExpr = AL.getArgAsExpr(I); in handleCallbackAttr()
3961 if (!checkUInt32Argument(S, AL, IdxExpr, (uint32_t &)ArgIdx, I + 1, in handleCallbackAttr()
3963 S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) in handleCallbackAttr()
3964 << AL << (I + 1) << IdxExpr->getSourceRange(); in handleCallbackAttr()
3970 S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) in handleCallbackAttr()
3971 << AL << (I + 1) << IdxExpr->getSourceRange(); in handleCallbackAttr()
3981 S.Diag(AL.getLoc(), diag::err_callback_implicit_this_not_available) in handleCallbackAttr()
3999 S.Diag(AL.getLoc(), diag::err_callback_attribute_invalid_callee) in handleCallbackAttr()
4000 << AL.getRange(); in handleCallbackAttr()
4010 S.Diag(AL.getLoc(), diag::err_callback_callee_no_function_type) in handleCallbackAttr()
4011 << AL.getRange(); in handleCallbackAttr()
4022 S.Diag(AL.getLoc(), diag::err_callback_callee_no_function_type) in handleCallbackAttr()
4023 << AL.getRange(); in handleCallbackAttr()
4028 S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) in handleCallbackAttr()
4029 << AL << (unsigned)(EncodingIndices.size() - 1); in handleCallbackAttr()
4034 S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) in handleCallbackAttr()
4035 << AL << (unsigned)(EncodingIndices.size() - 1); in handleCallbackAttr()
4040 S.Diag(AL.getLoc(), diag::err_callback_callee_is_variadic) << AL.getRange(); in handleCallbackAttr()
4046 S.Diag(AL.getLoc(), diag::err_callback_attribute_multiple) << AL.getRange(); in handleCallbackAttr()
4051 S.Context, AL, EncodingIndices.data(), EncodingIndices.size())); in handleCallbackAttr()
4062 static void handleCalledOnceAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleCalledOnceAttr() argument
4067 S.Diag(AL.getLoc(), diag::err_called_once_attribute_wrong_type); in handleCalledOnceAttr()
4071 D->addAttr(::new (S.Context) CalledOnceAttr(S.Context, AL)); in handleCalledOnceAttr()
4074 static void handleTransparentUnionAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleTransparentUnionAttr() argument
4084 S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL in handleTransparentUnionAttr()
4091 S.Diag(AL.getLoc(), in handleTransparentUnionAttr()
4099 S.Diag(AL.getLoc(), diag::warn_transparent_union_attribute_zero_fields); in handleTransparentUnionAttr()
4142 RD->addAttr(::new (S.Context) TransparentUnionAttr(S.Context, AL)); in handleTransparentUnionAttr()
4154 static void handleAnnotateAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAnnotateAttr() argument
4158 if (!S.checkStringLiteralArgumentAttr(AL, 0, Str)) in handleAnnotateAttr()
4162 Args.reserve(AL.getNumArgs() - 1); in handleAnnotateAttr()
4163 for (unsigned Idx = 1; Idx < AL.getNumArgs(); Idx++) { in handleAnnotateAttr()
4164 assert(!AL.isArgIdent(Idx)); in handleAnnotateAttr()
4165 Args.push_back(AL.getArgAsExpr(Idx)); in handleAnnotateAttr()
4168 S.AddAnnotationAttr(D, AL, Str, Args); in handleAnnotateAttr()
4171 static void handleAlignValueAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAlignValueAttr() argument
4172 S.AddAlignValueAttr(D, AL, AL.getArgAsExpr(0)); in handleAlignValueAttr()
4215 static void handleAlignedAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAlignedAttr() argument
4217 if (AL.getNumArgs() > 1) { in handleAlignedAttr()
4218 S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1; in handleAlignedAttr()
4222 if (AL.getNumArgs() == 0) { in handleAlignedAttr()
4223 D->addAttr(::new (S.Context) AlignedAttr(S.Context, AL, true, nullptr)); in handleAlignedAttr()
4227 Expr *E = AL.getArgAsExpr(0); in handleAlignedAttr()
4228 if (AL.isPackExpansion() && !E->containsUnexpandedParameterPack()) { in handleAlignedAttr()
4229 S.Diag(AL.getEllipsisLoc(), in handleAlignedAttr()
4234 if (!AL.isPackExpansion() && S.DiagnoseUnexpandedParameterPack(E)) in handleAlignedAttr()
4237 S.AddAlignedAttr(D, AL, E, AL.isPackExpansion()); in handleAlignedAttr()
4518 static void handleModeAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleModeAttr() argument
4521 if (!AL.isArgIdent(0)) { in handleModeAttr()
4522 S.Diag(AL.getLoc(), diag::err_attribute_argument_type) in handleModeAttr()
4523 << AL << AANT_ArgumentIdentifier; in handleModeAttr()
4527 IdentifierInfo *Name = AL.getArgAsIdent(0)->Ident; in handleModeAttr()
4529 S.AddModeAttr(D, AL, Name); in handleModeAttr()
4675 static void handleNoDebugAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleNoDebugAttr() argument
4676 D->addAttr(::new (S.Context) NoDebugAttr(S.Context, AL)); in handleNoDebugAttr()
4695 const ParsedAttr &AL) { in mergeInternalLinkageAttr() argument
4700 Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) in mergeInternalLinkageAttr()
4701 << AL << (getLangOpts().CPlusPlus ? ExpectedFunctionVariableOrClass in mergeInternalLinkageAttr()
4712 return ::new (Context) InternalLinkageAttr(Context, AL); in mergeInternalLinkageAttr()
4715 Sema::mergeInternalLinkageAttr(Decl *D, const InternalLinkageAttr &AL) { in mergeInternalLinkageAttr() argument
4720 Diag(AL.getLocation(), diag::warn_attribute_wrong_decl_type) in mergeInternalLinkageAttr()
4721 << &AL << (getLangOpts().CPlusPlus ? ExpectedFunctionVariableOrClass in mergeInternalLinkageAttr()
4732 return ::new (Context) InternalLinkageAttr(Context, AL); in mergeInternalLinkageAttr()
4781 static void handleAlwaysInlineAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAlwaysInlineAttr() argument
4783 S.mergeAlwaysInlineAttr(D, AL, AL.getAttrName())) in handleAlwaysInlineAttr()
4787 static void handleMinSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleMinSizeAttr() argument
4788 if (MinSizeAttr *MinSize = S.mergeMinSizeAttr(D, AL)) in handleMinSizeAttr()
4792 static void handleOptimizeNoneAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleOptimizeNoneAttr() argument
4793 if (OptimizeNoneAttr *Optnone = S.mergeOptimizeNoneAttr(D, AL)) in handleOptimizeNoneAttr()
4797 static void handleConstantAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleConstantAttr() argument
4800 S.Diag(AL.getLoc(), diag::err_cuda_nonstatic_constdev); in handleConstantAttr()
4810 D->addAttr(::new (S.Context) CUDAConstantAttr(S.Context, AL)); in handleConstantAttr()
4813 static void handleSharedAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleSharedAttr() argument
4819 S.Diag(AL.getLoc(), diag::err_cuda_extern_shared) << VD; in handleSharedAttr()
4823 S.CUDADiagIfHostCode(AL.getLoc(), diag::err_cuda_host_shared) in handleSharedAttr()
4826 D->addAttr(::new (S.Context) CUDASharedAttr(S.Context, AL)); in handleSharedAttr()
4829 static void handleGlobalAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleGlobalAttr() argument
4853 D->addAttr(::new (S.Context) CUDAGlobalAttr(S.Context, AL)); in handleGlobalAttr()
4862 static void handleDeviceAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleDeviceAttr() argument
4865 S.Diag(AL.getLoc(), diag::err_cuda_nonstatic_constdev); in handleDeviceAttr()
4875 D->addAttr(::new (S.Context) CUDADeviceAttr(S.Context, AL)); in handleDeviceAttr()
4878 static void handleManagedAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleManagedAttr() argument
4881 S.Diag(AL.getLoc(), diag::err_cuda_nonstatic_constdev); in handleManagedAttr()
4886 D->addAttr(::new (S.Context) HIPManagedAttr(S.Context, AL)); in handleManagedAttr()
4891 static void handleGNUInlineAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleGNUInlineAttr() argument
4894 S.Diag(AL.getLoc(), diag::warn_gnu_inline_attribute_requires_inline); in handleGNUInlineAttr()
4899 S.Diag(AL.getLoc(), diag::warn_gnu_inline_cplusplus_without_extern); in handleGNUInlineAttr()
4901 D->addAttr(::new (S.Context) GNUInlineAttr(S.Context, AL)); in handleGNUInlineAttr()
4904 static void handleCallConvAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleCallConvAttr() argument
4910 if (S.CheckCallingConvAttr(AL, CC, /*FD*/nullptr)) in handleCallConvAttr()
4914 S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) in handleCallConvAttr()
4915 << AL << ExpectedFunctionOrMethod; in handleCallConvAttr()
4919 switch (AL.getKind()) { in handleCallConvAttr()
4921 D->addAttr(::new (S.Context) FastCallAttr(S.Context, AL)); in handleCallConvAttr()
4924 D->addAttr(::new (S.Context) StdCallAttr(S.Context, AL)); in handleCallConvAttr()
4927 D->addAttr(::new (S.Context) ThisCallAttr(S.Context, AL)); in handleCallConvAttr()
4930 D->addAttr(::new (S.Context) CDeclAttr(S.Context, AL)); in handleCallConvAttr()
4933 D->addAttr(::new (S.Context) PascalAttr(S.Context, AL)); in handleCallConvAttr()
4936 D->addAttr(::new (S.Context) SwiftCallAttr(S.Context, AL)); in handleCallConvAttr()
4939 D->addAttr(::new (S.Context) SwiftAsyncCallAttr(S.Context, AL)); in handleCallConvAttr()
4942 D->addAttr(::new (S.Context) VectorCallAttr(S.Context, AL)); in handleCallConvAttr()
4945 D->addAttr(::new (S.Context) MSABIAttr(S.Context, AL)); in handleCallConvAttr()
4948 D->addAttr(::new (S.Context) SysVABIAttr(S.Context, AL)); in handleCallConvAttr()
4951 D->addAttr(::new (S.Context) RegCallAttr(S.Context, AL)); in handleCallConvAttr()
4966 D->addAttr(::new (S.Context) PcsAttr(S.Context, AL, PCS)); in handleCallConvAttr()
4970 D->addAttr(::new (S.Context) AArch64VectorPcsAttr(S.Context, AL)); in handleCallConvAttr()
4973 D->addAttr(::new (S.Context) AArch64SVEPcsAttr(S.Context, AL)); in handleCallConvAttr()
4976 D->addAttr(::new (S.Context) AMDGPUKernelCallAttr(S.Context, AL)); in handleCallConvAttr()
4979 D->addAttr(::new (S.Context) IntelOclBiccAttr(S.Context, AL)); in handleCallConvAttr()
4982 D->addAttr(::new (S.Context) PreserveMostAttr(S.Context, AL)); in handleCallConvAttr()
4985 D->addAttr(::new (S.Context) PreserveAllAttr(S.Context, AL)); in handleCallConvAttr()
4992 static void handleSuppressAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleSuppressAttr() argument
4993 if (!AL.checkAtLeastNumArgs(S, 1)) in handleSuppressAttr()
4997 for (unsigned I = 0, E = AL.getNumArgs(); I != E; ++I) { in handleSuppressAttr()
5000 if (!S.checkStringLiteralArgumentAttr(AL, I, RuleName, nullptr)) in handleSuppressAttr()
5008 SuppressAttr(S.Context, AL, DiagnosticIdentifiers.data(), in handleSuppressAttr()
5012 static void handleLifetimeCategoryAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleLifetimeCategoryAttr() argument
5015 if (AL.hasParsedType()) { in handleLifetimeCategoryAttr()
5016 ParmType = S.GetTypeFromParser(AL.getTypeArg(), &DerefTypeLoc); in handleLifetimeCategoryAttr()
5025 S.Diag(AL.getLoc(), diag::err_attribute_invalid_argument) in handleLifetimeCategoryAttr()
5026 << SelectIdx << AL; in handleLifetimeCategoryAttr()
5037 if (AL.getKind() == ParsedAttr::AT_Owner) { in handleLifetimeCategoryAttr()
5038 if (checkAttrMutualExclusion<PointerAttr>(S, D, AL)) in handleLifetimeCategoryAttr()
5045 S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) in handleLifetimeCategoryAttr()
5046 << AL << OAttr; in handleLifetimeCategoryAttr()
5052 Redecl->addAttr(::new (S.Context) OwnerAttr(S.Context, AL, DerefTypeLoc)); in handleLifetimeCategoryAttr()
5055 if (checkAttrMutualExclusion<OwnerAttr>(S, D, AL)) in handleLifetimeCategoryAttr()
5062 S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) in handleLifetimeCategoryAttr()
5063 << AL << PAttr; in handleLifetimeCategoryAttr()
5070 PointerAttr(S.Context, AL, DerefTypeLoc)); in handleLifetimeCategoryAttr()
5075 static void handleRandomizeLayoutAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleRandomizeLayoutAttr() argument
5076 if (checkAttrMutualExclusion<NoRandomizeLayoutAttr>(S, D, AL)) in handleRandomizeLayoutAttr()
5079 D->addAttr(::new (S.Context) RandomizeLayoutAttr(S.Context, AL)); in handleRandomizeLayoutAttr()
5083 const ParsedAttr &AL) { in handleNoRandomizeLayoutAttr() argument
5084 if (checkAttrMutualExclusion<RandomizeLayoutAttr>(S, D, AL)) in handleNoRandomizeLayoutAttr()
5087 D->addAttr(::new (S.Context) NoRandomizeLayoutAttr(S.Context, AL)); in handleNoRandomizeLayoutAttr()
5342 bool Sema::CheckRegparmAttr(const ParsedAttr &AL, unsigned &numParams) { in CheckRegparmAttr() argument
5343 if (AL.isInvalid()) in CheckRegparmAttr()
5346 if (!AL.checkExactlyNumArgs(*this, 1)) { in CheckRegparmAttr()
5347 AL.setInvalid(); in CheckRegparmAttr()
5352 Expr *NumParamsExpr = AL.getArgAsExpr(0); in CheckRegparmAttr()
5353 if (!checkUInt32Argument(*this, AL, NumParamsExpr, NP)) { in CheckRegparmAttr()
5354 AL.setInvalid(); in CheckRegparmAttr()
5359 Diag(AL.getLoc(), diag::err_attribute_regparm_wrong_platform) in CheckRegparmAttr()
5361 AL.setInvalid(); in CheckRegparmAttr()
5367 Diag(AL.getLoc(), diag::err_attribute_regparm_invalid_number) in CheckRegparmAttr()
5369 AL.setInvalid(); in CheckRegparmAttr()
5381 const CUDALaunchBoundsAttr &AL, in makeLaunchBoundsArgExpr() argument
5394 << &AL << Idx << AANT_ArgumentIntegerConstant << E->getSourceRange(); in makeLaunchBoundsArgExpr()
5405 << &AL << Idx << E->getSourceRange(); in makeLaunchBoundsArgExpr()
5434 static void handleLaunchBoundsAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleLaunchBoundsAttr() argument
5435 if (!AL.checkAtLeastNumArgs(S, 1) || !AL.checkAtMostNumArgs(S, 2)) in handleLaunchBoundsAttr()
5438 S.AddLaunchBoundsAttr(D, AL, AL.getArgAsExpr(0), in handleLaunchBoundsAttr()
5439 AL.getNumArgs() > 1 ? AL.getArgAsExpr(1) : nullptr); in handleLaunchBoundsAttr()
5443 const ParsedAttr &AL) { in handleArgumentWithTypeTagAttr() argument
5444 if (!AL.isArgIdent(0)) { in handleArgumentWithTypeTagAttr()
5445 S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) in handleArgumentWithTypeTagAttr()
5446 << AL << /* arg num = */ 1 << AANT_ArgumentIdentifier; in handleArgumentWithTypeTagAttr()
5451 if (!checkFunctionOrMethodParameterIndex(S, D, AL, 2, AL.getArgAsExpr(1), in handleArgumentWithTypeTagAttr()
5456 if (!checkFunctionOrMethodParameterIndex(S, D, AL, 3, AL.getArgAsExpr(2), in handleArgumentWithTypeTagAttr()
5460 bool IsPointer = AL.getAttrName()->getName() == "pointer_with_type_tag"; in handleArgumentWithTypeTagAttr()
5466 S.Diag(AL.getLoc(), diag::err_attribute_pointers_only) << AL << 0; in handleArgumentWithTypeTagAttr()
5470 S.Context, AL, AL.getArgAsIdent(0)->Ident, ArgumentIdx, TypeTagIdx, in handleArgumentWithTypeTagAttr()
5475 const ParsedAttr &AL) { in handleTypeTagForDatatypeAttr() argument
5476 if (!AL.isArgIdent(0)) { in handleTypeTagForDatatypeAttr()
5477 S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) in handleTypeTagForDatatypeAttr()
5478 << AL << 1 << AANT_ArgumentIdentifier; in handleTypeTagForDatatypeAttr()
5482 if (!AL.checkExactlyNumArgs(S, 1)) in handleTypeTagForDatatypeAttr()
5486 S.Diag(AL.getLoc(), diag::err_attribute_wrong_decl_type) in handleTypeTagForDatatypeAttr()
5487 << AL << ExpectedVariable; in handleTypeTagForDatatypeAttr()
5491 IdentifierInfo *PointerKind = AL.getArgAsIdent(0)->Ident; in handleTypeTagForDatatypeAttr()
5493 S.GetTypeFromParser(AL.getMatchingCType(), &MatchingCTypeLoc); in handleTypeTagForDatatypeAttr()
5497 S.Context, AL, PointerKind, MatchingCTypeLoc, AL.getLayoutCompatible(), in handleTypeTagForDatatypeAttr()
5498 AL.getMustBeNull())); in handleTypeTagForDatatypeAttr()
5501 static void handleXRayLogArgsAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleXRayLogArgsAttr() argument
5504 if (!checkFunctionOrMethodParameterIndex(S, D, AL, 1, AL.getArgAsExpr(0), in handleXRayLogArgsAttr()
5511 XRayLogArgsAttr(S.Context, AL, ArgCount.getSourceIndex())); in handleXRayLogArgsAttr()
5515 const ParsedAttr &AL) { in handlePatchableFunctionEntryAttr() argument
5517 if (!checkUInt32Argument(S, AL, AL.getArgAsExpr(0), Count, 0, true)) in handlePatchableFunctionEntryAttr()
5519 if (AL.getNumArgs() == 2) { in handlePatchableFunctionEntryAttr()
5520 Expr *Arg = AL.getArgAsExpr(1); in handlePatchableFunctionEntryAttr()
5521 if (!checkUInt32Argument(S, AL, Arg, Offset, 1, true)) in handlePatchableFunctionEntryAttr()
5524 S.Diag(getAttrLoc(AL), diag::err_attribute_argument_out_of_range) in handlePatchableFunctionEntryAttr()
5525 << &AL << 0 << Count << Arg->getBeginLoc(); in handlePatchableFunctionEntryAttr()
5530 PatchableFunctionEntryAttr(S.Context, AL, Count, Offset)); in handlePatchableFunctionEntryAttr()
5581 static void handleArmBuiltinAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleArmBuiltinAliasAttr() argument
5582 if (!AL.isArgIdent(0)) { in handleArmBuiltinAliasAttr()
5583 S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) in handleArmBuiltinAliasAttr()
5584 << AL << 1 << AANT_ArgumentIdentifier; in handleArmBuiltinAliasAttr()
5588 IdentifierInfo *Ident = AL.getArgAsIdent(0)->Ident; in handleArmBuiltinAliasAttr()
5596 S.Diag(AL.getLoc(), diag::err_attribute_arm_builtin_alias); in handleArmBuiltinAliasAttr()
5600 D->addAttr(::new (S.Context) ArmBuiltinAliasAttr(S.Context, AL, Ident)); in handleArmBuiltinAliasAttr()
5609 const ParsedAttr &AL) { in handleBuiltinAliasAttr() argument
5610 if (!AL.isArgIdent(0)) { in handleBuiltinAliasAttr()
5611 S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) in handleBuiltinAliasAttr()
5612 << AL << 1 << AANT_ArgumentIdentifier; in handleBuiltinAliasAttr()
5616 IdentifierInfo *Ident = AL.getArgAsIdent(0)->Ident; in handleBuiltinAliasAttr()
5629 S.Diag(AL.getLoc(), diag::err_attribute_builtin_alias) << AL; in handleBuiltinAliasAttr()
5633 D->addAttr(::new (S.Context) BuiltinAliasAttr(S.Context, AL, Ident)); in handleBuiltinAliasAttr()
5694 parsedAttrToRetainOwnershipKind(const ParsedAttr &AL) { in parsedAttrToRetainOwnershipKind() argument
5695 switch (AL.getKind()) { in parsedAttrToRetainOwnershipKind()
5738 const ParsedAttr &AL) { in handleXReturnsXRetainedAttr() argument
5740 Sema::RetainOwnershipKind K = parsedAttrToRetainOwnershipKind(AL); in handleXReturnsXRetainedAttr()
5745 (AL.getKind() == ParsedAttr::AT_NSReturnsRetained)) { in handleXReturnsXRetainedAttr()
5760 << AL << DiagID << AL.getRange(); in handleXReturnsXRetainedAttr()
5763 } else if (AL.isUsedAsTypeAttr()) { in handleXReturnsXRetainedAttr()
5767 switch (AL.getKind()) { in handleXReturnsXRetainedAttr()
5783 << AL.getRange() << AL << ExpectedDeclKind; in handleXReturnsXRetainedAttr()
5790 switch (AL.getKind()) { in handleXReturnsXRetainedAttr()
5818 if (AL.isUsedAsTypeAttr()) in handleXReturnsXRetainedAttr()
5823 << AL << ParmDiagID << AL.getRange(); in handleXReturnsXRetainedAttr()
5836 << AL << SubjectKind << Cf << AL.getRange(); in handleXReturnsXRetainedAttr()
5841 switch (AL.getKind()) { in handleXReturnsXRetainedAttr()
5845 handleSimpleAttribute<NSReturnsAutoreleasedAttr>(S, D, AL); in handleXReturnsXRetainedAttr()
5848 handleSimpleAttribute<CFReturnsNotRetainedAttr>(S, D, AL); in handleXReturnsXRetainedAttr()
5851 handleSimpleAttribute<NSReturnsNotRetainedAttr>(S, D, AL); in handleXReturnsXRetainedAttr()
5854 handleSimpleAttribute<CFReturnsRetainedAttr>(S, D, AL); in handleXReturnsXRetainedAttr()
5857 handleSimpleAttribute<NSReturnsRetainedAttr>(S, D, AL); in handleXReturnsXRetainedAttr()
5860 handleSimpleAttribute<OSReturnsRetainedAttr>(S, D, AL); in handleXReturnsXRetainedAttr()
5863 handleSimpleAttribute<OSReturnsNotRetainedAttr>(S, D, AL); in handleXReturnsXRetainedAttr()
5914 static void handleNSErrorDomain(Sema &S, Decl *D, const ParsedAttr &AL) { in handleNSErrorDomain() argument
5915 auto *E = AL.getArgAsExpr(0); in handleNSErrorDomain()
5916 auto Loc = E ? E->getBeginLoc() : AL.getLoc(); in handleNSErrorDomain()
5918 auto *DRE = dyn_cast<DeclRefExpr>(AL.getArgAsExpr(0)); in handleNSErrorDomain()
5936 D->addAttr(::new (S.Context) NSErrorDomainAttr(S.Context, AL, VD)); in handleNSErrorDomain()
5939 static void handleObjCBridgeAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleObjCBridgeAttr() argument
5940 IdentifierLoc *Parm = AL.isArgIdent(0) ? AL.getArgAsIdent(0) : nullptr; in handleObjCBridgeAttr()
5943 S.Diag(D->getBeginLoc(), diag::err_objc_attr_not_id) << AL << 0; in handleObjCBridgeAttr()
5950 S.Diag(AL.getLoc(), diag::err_objc_attr_typedef_not_id) << AL; in handleObjCBridgeAttr()
5957 S.Diag(AL.getLoc(), diag::err_objc_attr_typedef_not_void_pointer); in handleObjCBridgeAttr()
5962 D->addAttr(::new (S.Context) ObjCBridgeAttr(S.Context, AL, Parm->Ident)); in handleObjCBridgeAttr()
5966 const ParsedAttr &AL) { in handleObjCBridgeMutableAttr() argument
5967 IdentifierLoc *Parm = AL.isArgIdent(0) ? AL.getArgAsIdent(0) : nullptr; in handleObjCBridgeMutableAttr()
5970 S.Diag(D->getBeginLoc(), diag::err_objc_attr_not_id) << AL << 0; in handleObjCBridgeMutableAttr()
5975 ObjCBridgeMutableAttr(S.Context, AL, Parm->Ident)); in handleObjCBridgeMutableAttr()
5979 const ParsedAttr &AL) { in handleObjCBridgeRelatedAttr() argument
5981 AL.isArgIdent(0) ? AL.getArgAsIdent(0)->Ident : nullptr; in handleObjCBridgeRelatedAttr()
5983 S.Diag(D->getBeginLoc(), diag::err_objc_attr_not_id) << AL << 0; in handleObjCBridgeRelatedAttr()
5987 AL.getArgAsIdent(1) ? AL.getArgAsIdent(1)->Ident : nullptr; in handleObjCBridgeRelatedAttr()
5989 AL.getArgAsIdent(2) ? AL.getArgAsIdent(2)->Ident : nullptr; in handleObjCBridgeRelatedAttr()
5991 S.Context, AL, RelatedClass, ClassMethod, InstanceMethod)); in handleObjCBridgeRelatedAttr()
5995 const ParsedAttr &AL) { in handleObjCDesignatedInitializer() argument
6017 D->addAttr(::new (S.Context) ObjCDesignatedInitializerAttr(S.Context, AL)); in handleObjCDesignatedInitializer()
6020 static void handleObjCRuntimeName(Sema &S, Decl *D, const ParsedAttr &AL) { in handleObjCRuntimeName() argument
6022 if (!S.checkStringLiteralArgumentAttr(AL, 0, MetaDataName)) in handleObjCRuntimeName()
6025 ObjCRuntimeNameAttr(S.Context, AL, MetaDataName)); in handleObjCRuntimeName()
6032 static void handleObjCBoxable(Sema &S, Decl *D, const ParsedAttr &AL) { in handleObjCBoxable() argument
6043 ::new (S.Context) ObjCBoxableAttr(S.Context, AL); in handleObjCBoxable()
6054 static void handleObjCOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleObjCOwnershipAttr() argument
6058 << AL.getRange() << AL << ExpectedVariable; in handleObjCOwnershipAttr()
6062 const ParsedAttr &AL) { in handleObjCPreciseLifetimeAttr() argument
6068 S.Diag(AL.getLoc(), diag::err_objc_precise_lifetime_bad_type) in handleObjCPreciseLifetimeAttr()
6092 S.Diag(AL.getLoc(), diag::warn_objc_precise_lifetime_meaningless) in handleObjCPreciseLifetimeAttr()
6097 D->addAttr(::new (S.Context) ObjCPreciseLifetimeAttr(S.Context, AL)); in handleObjCPreciseLifetimeAttr()
6100 static void handleSwiftAttrAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleSwiftAttrAttr() argument
6104 if (!S.checkStringLiteralArgumentAttr(AL, 0, Str)) in handleSwiftAttrAttr()
6107 D->addAttr(::new (S.Context) SwiftAttrAttr(S.Context, AL, Str)); in handleSwiftAttrAttr()
6110 static void handleSwiftBridge(Sema &S, Decl *D, const ParsedAttr &AL) { in handleSwiftBridge() argument
6114 if (!S.checkStringLiteralArgumentAttr(AL, 0, BT)) in handleSwiftBridge()
6121 S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL; in handleSwiftBridge()
6125 D->addAttr(::new (S.Context) SwiftBridgeAttr(S.Context, AL, BT)); in handleSwiftBridge()
6150 static void handleSwiftError(Sema &S, Decl *D, const ParsedAttr &AL) { in handleSwiftError() argument
6151 auto hasErrorParameter = [](Sema &S, Decl *D, const ParsedAttr &AL) -> bool { in handleSwiftError() argument
6157 S.Diag(AL.getLoc(), diag::err_attr_swift_error_no_error_parameter) in handleSwiftError()
6158 << AL << isa<ObjCMethodDecl>(D); in handleSwiftError()
6162 auto hasPointerResult = [](Sema &S, Decl *D, const ParsedAttr &AL) -> bool { in handleSwiftError() argument
6170 S.Diag(AL.getLoc(), diag::err_attr_swift_error_return_type) in handleSwiftError()
6171 << AL << AL.getArgAsIdent(0)->Ident->getName() << isa<ObjCMethodDecl>(D) in handleSwiftError()
6176 auto hasIntegerResult = [](Sema &S, Decl *D, const ParsedAttr &AL) -> bool { in handleSwiftError() argument
6181 S.Diag(AL.getLoc(), diag::err_attr_swift_error_return_type) in handleSwiftError()
6182 << AL << AL.getArgAsIdent(0)->Ident->getName() << isa<ObjCMethodDecl>(D) in handleSwiftError()
6190 IdentifierLoc *Loc = AL.getArgAsIdent(0); in handleSwiftError()
6194 S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) in handleSwiftError()
6195 << AL << Loc->Ident; in handleSwiftError()
6205 if (!hasErrorParameter(S, D, AL)) in handleSwiftError()
6210 if (!hasErrorParameter(S, D, AL) || !hasPointerResult(S, D, AL)) in handleSwiftError()
6216 if (!hasErrorParameter(S, D, AL) || !hasIntegerResult(S, D, AL)) in handleSwiftError()
6221 D->addAttr(::new (S.Context) SwiftErrorAttr(S.Context, AL, Convention)); in handleSwiftError()
6305 static void handleSwiftAsyncError(Sema &S, Decl *D, const ParsedAttr &AL) { in handleSwiftAsyncError() argument
6306 IdentifierLoc *IDLoc = AL.getArgAsIdent(0); in handleSwiftAsyncError()
6310 S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) in handleSwiftAsyncError()
6311 << AL << IDLoc->Ident; in handleSwiftAsyncError()
6319 if (!AL.checkExactlyNumArgs(S, 2)) in handleSwiftAsyncError()
6322 Expr *IdxExpr = AL.getArgAsExpr(1); in handleSwiftAsyncError()
6323 if (!checkUInt32Argument(S, AL, IdxExpr, ParamIdx)) in handleSwiftAsyncError()
6329 if (!AL.checkExactlyNumArgs(S, 1)) in handleSwiftAsyncError()
6336 ::new (S.Context) SwiftAsyncErrorAttr(S.Context, AL, ConvKind, ParamIdx); in handleSwiftAsyncError()
6352 validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, in validateSwiftFunctionName() argument
6369 S.Diag(Loc, diag::warn_attr_swift_name_function) << AL; in validateSwiftFunctionName()
6386 << AL << /*context*/ 1; in validateSwiftFunctionName()
6394 << AL << /*basename*/ 0; in validateSwiftFunctionName()
6402 << AL << /* getter or setter */ 0; in validateSwiftFunctionName()
6407 S.Diag(Loc, diag::warn_attr_swift_name_missing_parameters) << AL; in validateSwiftFunctionName()
6418 << AL << /* have at least one parameter */1; in validateSwiftFunctionName()
6423 S.Diag(Loc, diag::warn_attr_swift_name_setter_parameters) << AL; in validateSwiftFunctionName()
6431 S.Diag(Loc, diag::warn_attr_swift_name_function) << AL; in validateSwiftFunctionName()
6444 << AL << /*parameter*/2; in validateSwiftFunctionName()
6453 S.Diag(Loc, diag::warn_attr_swift_name_multiple_selfs) << AL; in validateSwiftFunctionName()
6475 << AL << /*have a 'self:' parameter*/2; in validateSwiftFunctionName()
6498 S.Diag(Loc, ParamDiag) << AL; in validateSwiftFunctionName()
6507 << AL; in validateSwiftFunctionName()
6512 << AL; in validateSwiftFunctionName()
6519 << AL; in validateSwiftFunctionName()
6526 S.Diag(Loc, ParamDiag) << AL; in validateSwiftFunctionName()
6536 const ParsedAttr &AL, bool IsAsync) { in DiagnoseSwiftName() argument
6551 Diag(Loc, diag::warn_attribute_wrong_decl_type) << AL in DiagnoseSwiftName()
6561 << AL << isa<ObjCMethodDecl>(D); in DiagnoseSwiftName()
6569 if (!validateSwiftFunctionName(*this, AL, Loc, Name, in DiagnoseSwiftName()
6595 << (SwiftParamCount > ParamCount) << AL << ParamCount in DiagnoseSwiftName()
6611 Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL in DiagnoseSwiftName()
6617 Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL in DiagnoseSwiftName()
6622 Diag(Loc, diag::warn_attr_swift_name_decl_kind) << AL; in DiagnoseSwiftName()
6628 static void handleSwiftName(Sema &S, Decl *D, const ParsedAttr &AL) { in handleSwiftName() argument
6631 if (!S.checkStringLiteralArgumentAttr(AL, 0, Name, &Loc)) in handleSwiftName()
6634 if (!S.DiagnoseSwiftName(D, Name, Loc, AL, /*IsAsync=*/false)) in handleSwiftName()
6637 D->addAttr(::new (S.Context) SwiftNameAttr(S.Context, AL, Name)); in handleSwiftName()
6640 static void handleSwiftAsyncName(Sema &S, Decl *D, const ParsedAttr &AL) { in handleSwiftAsyncName() argument
6643 if (!S.checkStringLiteralArgumentAttr(AL, 0, Name, &Loc)) in handleSwiftAsyncName()
6646 if (!S.DiagnoseSwiftName(D, Name, Loc, AL, /*IsAsync=*/true)) in handleSwiftAsyncName()
6649 D->addAttr(::new (S.Context) SwiftAsyncNameAttr(S.Context, AL, Name)); in handleSwiftAsyncName()
6652 static void handleSwiftNewType(Sema &S, Decl *D, const ParsedAttr &AL) { in handleSwiftNewType() argument
6654 if (!AL.checkExactlyNumArgs(S, 1)) in handleSwiftNewType()
6657 if (!AL.isArgIdent(0)) { in handleSwiftNewType()
6658 S.Diag(AL.getLoc(), diag::err_attribute_argument_type) in handleSwiftNewType()
6659 << AL << AANT_ArgumentIdentifier; in handleSwiftNewType()
6664 IdentifierInfo *II = AL.getArgAsIdent(0)->Ident; in handleSwiftNewType()
6666 S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II; in handleSwiftNewType()
6671 S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type_str) in handleSwiftNewType()
6672 << AL << "typedefs"; in handleSwiftNewType()
6676 D->addAttr(::new (S.Context) SwiftNewTypeAttr(S.Context, AL, Kind)); in handleSwiftNewType()
6679 static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleSwiftAsyncAttr() argument
6680 if (!AL.isArgIdent(0)) { in handleSwiftAsyncAttr()
6681 S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) in handleSwiftAsyncAttr()
6682 << AL << 1 << AANT_ArgumentIdentifier; in handleSwiftAsyncAttr()
6687 IdentifierInfo *II = AL.getArgAsIdent(0)->Ident; in handleSwiftAsyncAttr()
6689 S.Diag(AL.getLoc(), diag::err_swift_async_no_access) << AL << II; in handleSwiftAsyncAttr()
6696 if (!AL.checkExactlyNumArgs(S, 1)) in handleSwiftAsyncAttr()
6700 if (!AL.checkExactlyNumArgs(S, 2)) in handleSwiftAsyncAttr()
6703 Expr *HandlerIdx = AL.getArgAsExpr(1); in handleSwiftAsyncAttr()
6704 if (!checkFunctionOrMethodParameterIndex(S, D, AL, 2, HandlerIdx, Idx)) in handleSwiftAsyncAttr()
6727 ::new (S.Context) SwiftAsyncAttr(S.Context, AL, Kind, Idx); in handleSwiftAsyncAttr()
6753 static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleUuidAttr() argument
6755 S.Diag(AL.getLoc(), diag::err_attribute_not_supported_in_lang) in handleUuidAttr()
6756 << AL << AttributeLangSupport::C; in handleUuidAttr()
6762 if (!S.checkStringLiteralArgumentAttr(AL, 0, OrigStrRef, &LiteralLoc)) in handleUuidAttr()
6805 if (AL.isMicrosoftAttribute()) // Check for [uuid(...)] spelling. in handleUuidAttr()
6806 S.Diag(AL.getLoc(), diag::warn_atl_uuid_deprecated); in handleUuidAttr()
6808 UuidAttr *UA = S.mergeUuidAttr(D, AL, OrigStrRef, Guid); in handleUuidAttr()
6813 static void handleHLSLNumThreadsAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleHLSLNumThreadsAttr() argument
6822 S.Diag(AL.getLoc(), diag::err_hlsl_attr_unsupported_in_stage) in handleHLSLNumThreadsAttr()
6823 << AL << Pipeline << "Compute, Amplification, Mesh or Library"; in handleHLSLNumThreadsAttr()
6839 if (!checkUInt32Argument(S, AL, AL.getArgAsExpr(0), X)) in handleHLSLNumThreadsAttr()
6842 S.Diag(AL.getArgAsExpr(0)->getExprLoc(), in handleHLSLNumThreadsAttr()
6847 if (!checkUInt32Argument(S, AL, AL.getArgAsExpr(1), Y)) in handleHLSLNumThreadsAttr()
6850 S.Diag(AL.getArgAsExpr(1)->getExprLoc(), in handleHLSLNumThreadsAttr()
6855 if (!checkUInt32Argument(S, AL, AL.getArgAsExpr(2), Z)) in handleHLSLNumThreadsAttr()
6858 S.Diag(AL.getArgAsExpr(2)->getExprLoc(), in handleHLSLNumThreadsAttr()
6864 S.Diag(AL.getLoc(), diag::err_hlsl_numthreads_invalid) << ThreadMax; in handleHLSLNumThreadsAttr()
6868 HLSLNumThreadsAttr *NewAttr = S.mergeHLSLNumThreadsAttr(D, AL, X, Y, Z); in handleHLSLNumThreadsAttr()
6874 const AttributeCommonInfo &AL, in mergeHLSLNumThreadsAttr() argument
6878 Diag(NT->getLocation(), diag::err_hlsl_attribute_param_mismatch) << AL; in mergeHLSLNumThreadsAttr()
6879 Diag(AL.getLoc(), diag::note_conflicting_attribute); in mergeHLSLNumThreadsAttr()
6883 return ::new (Context) HLSLNumThreadsAttr(Context, AL, X, Y, Z); in mergeHLSLNumThreadsAttr()
6886 static void handleHLSLSVGroupIndexAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleHLSLSVGroupIndexAttr() argument
6893 S.Diag(AL.getLoc(), diag::err_hlsl_attr_unsupported_in_stage) in handleHLSLSVGroupIndexAttr()
6894 << AL << Pipeline << "Compute"; in handleHLSLSVGroupIndexAttr()
6898 D->addAttr(::new (S.Context) HLSLSV_GroupIndexAttr(S.Context, AL)); in handleHLSLSVGroupIndexAttr()
6901 static void handleHLSLShaderAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleHLSLShaderAttr() argument
6904 if (!S.checkStringLiteralArgumentAttr(AL, 0, Str, &ArgLoc)) in handleHLSLShaderAttr()
6909 S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) in handleHLSLShaderAttr()
6910 << AL << Str << ArgLoc; in handleHLSLShaderAttr()
6916 HLSLShaderAttr *NewAttr = S.mergeHLSLShaderAttr(D, AL, ShaderType); in handleHLSLShaderAttr()
6922 Sema::mergeHLSLShaderAttr(Decl *D, const AttributeCommonInfo &AL, in mergeHLSLShaderAttr() argument
6926 Diag(NT->getLocation(), diag::err_hlsl_attribute_param_mismatch) << AL; in mergeHLSLShaderAttr()
6927 Diag(AL.getLoc(), diag::note_conflicting_attribute); in mergeHLSLShaderAttr()
6931 return HLSLShaderAttr::Create(Context, ShaderType, AL); in mergeHLSLShaderAttr()
6934 static void handleMSInheritanceAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleMSInheritanceAttr() argument
6936 S.Diag(AL.getLoc(), diag::err_attribute_not_supported_in_lang) in handleMSInheritanceAttr()
6937 << AL << AttributeLangSupport::C; in handleMSInheritanceAttr()
6941 D, AL, /*BestCase=*/true, (MSInheritanceModel)AL.getSemanticSpelling()); in handleMSInheritanceAttr()
6948 static void handleDeclspecThreadAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleDeclspecThreadAttr() argument
6951 S.Diag(AL.getLoc(), diag::err_thread_unsupported); in handleDeclspecThreadAttr()
6955 S.Diag(AL.getLoc(), diag::err_declspec_thread_on_thread_variable); in handleDeclspecThreadAttr()
6959 S.Diag(AL.getLoc(), diag::err_thread_non_global) << "__declspec(thread)"; in handleDeclspecThreadAttr()
6962 D->addAttr(::new (S.Context) ThreadAttr(S.Context, AL)); in handleDeclspecThreadAttr()
6965 static void handleAbiTagAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAbiTagAttr() argument
6967 for (unsigned I = 0, E = AL.getNumArgs(); I != E; ++I) { in handleAbiTagAttr()
6969 if (!S.checkStringLiteralArgumentAttr(AL, I, Tag)) in handleAbiTagAttr()
6976 S.Diag(AL.getLoc(), diag::warn_attr_abi_tag_namespace) << 0; in handleAbiTagAttr()
6980 S.Diag(AL.getLoc(), diag::warn_attr_abi_tag_namespace) << 1; in handleAbiTagAttr()
6983 if (AL.getNumArgs() == 0) in handleAbiTagAttr()
6985 } else if (!AL.checkAtLeastNumArgs(S, 1)) in handleAbiTagAttr()
6993 AbiTagAttr(S.Context, AL, Tags.data(), Tags.size())); in handleAbiTagAttr()
6996 static void handleARMInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleARMInterruptAttr() argument
6998 if (AL.getNumArgs() > 1) { in handleARMInterruptAttr()
6999 S.Diag(AL.getLoc(), diag::err_attribute_too_many_arguments) << AL << 1; in handleARMInterruptAttr()
7006 if (AL.getNumArgs() == 0) in handleARMInterruptAttr()
7008 else if (!S.checkStringLiteralArgumentAttr(AL, 0, Str, &ArgLoc)) in handleARMInterruptAttr()
7013 S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << Str in handleARMInterruptAttr()
7018 D->addAttr(::new (S.Context) ARMInterruptAttr(S.Context, AL, Kind)); in handleARMInterruptAttr()
7021 static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleMSP430InterruptAttr() argument
7043 if (!AL.checkExactlyNumArgs(S, 1)) in handleMSP430InterruptAttr()
7046 if (!AL.isArgExpr(0)) { in handleMSP430InterruptAttr()
7047 S.Diag(AL.getLoc(), diag::err_attribute_argument_type) in handleMSP430InterruptAttr()
7048 << AL << AANT_ArgumentIntegerConstant; in handleMSP430InterruptAttr()
7052 Expr *NumParamsExpr = static_cast<Expr *>(AL.getArgAsExpr(0)); in handleMSP430InterruptAttr()
7055 S.Diag(AL.getLoc(), diag::err_attribute_argument_type) in handleMSP430InterruptAttr()
7056 << AL << AANT_ArgumentIntegerConstant in handleMSP430InterruptAttr()
7063 S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) in handleMSP430InterruptAttr()
7064 << AL << (int)NumParams->getSExtValue() in handleMSP430InterruptAttr()
7069 D->addAttr(::new (S.Context) MSP430InterruptAttr(S.Context, AL, Num)); in handleMSP430InterruptAttr()
7073 static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleMipsInterruptAttr() argument
7075 if (AL.getNumArgs() > 1) { in handleMipsInterruptAttr()
7076 S.Diag(AL.getLoc(), diag::err_attribute_too_many_arguments) << AL << 1; in handleMipsInterruptAttr()
7083 if (AL.getNumArgs() == 0) in handleMipsInterruptAttr()
7085 else if (!S.checkStringLiteralArgumentAttr(AL, 0, Str, &ArgLoc)) in handleMipsInterruptAttr()
7117 if (checkAttrMutualExclusion<Mips16Attr>(S, D, AL)) in handleMipsInterruptAttr()
7122 S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) in handleMipsInterruptAttr()
7123 << AL << "'" + std::string(Str) + "'"; in handleMipsInterruptAttr()
7127 D->addAttr(::new (S.Context) MipsInterruptAttr(S.Context, AL, Kind)); in handleMipsInterruptAttr()
7130 static void handleM68kInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleM68kInterruptAttr() argument
7131 if (!AL.checkExactlyNumArgs(S, 1)) in handleM68kInterruptAttr()
7134 if (!AL.isArgExpr(0)) { in handleM68kInterruptAttr()
7135 S.Diag(AL.getLoc(), diag::err_attribute_argument_type) in handleM68kInterruptAttr()
7136 << AL << AANT_ArgumentIntegerConstant; in handleM68kInterruptAttr()
7142 Expr *NumParamsExpr = static_cast<Expr *>(AL.getArgAsExpr(0)); in handleM68kInterruptAttr()
7145 S.Diag(AL.getLoc(), diag::err_attribute_argument_type) in handleM68kInterruptAttr()
7146 << AL << AANT_ArgumentIntegerConstant in handleM68kInterruptAttr()
7153 S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) in handleM68kInterruptAttr()
7154 << AL << (int)MaybeNumParams->getSExtValue() in handleM68kInterruptAttr()
7159 D->addAttr(::new (S.Context) M68kInterruptAttr(S.Context, AL, Num)); in handleM68kInterruptAttr()
7163 static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAnyX86InterruptAttr() argument
7173 S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) in handleAnyX86InterruptAttr()
7174 << AL << ExpectedFunctionWithProtoType; in handleAnyX86InterruptAttr()
7223 D->addAttr(::new (S.Context) AnyX86InterruptAttr(S.Context, AL)); in handleAnyX86InterruptAttr()
7227 static void handleAVRInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAVRInterruptAttr() argument
7234 if (!AL.checkExactlyNumArgs(S, 0)) in handleAVRInterruptAttr()
7237 handleSimpleAttribute<AVRInterruptAttr>(S, D, AL); in handleAVRInterruptAttr()
7240 static void handleAVRSignalAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAVRSignalAttr() argument
7247 if (!AL.checkExactlyNumArgs(S, 0)) in handleAVRSignalAttr()
7250 handleSimpleAttribute<AVRSignalAttr>(S, D, AL); in handleAVRSignalAttr()
7266 const ParsedAttr &AL) { in handleBPFPreserveAccessIndexAttr() argument
7269 Rec->addAttr(::new (S.Context) BPFPreserveAccessIndexAttr(S.Context, AL)); in handleBPFPreserveAccessIndexAttr()
7280 static void handleBTFDeclTagAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleBTFDeclTagAttr() argument
7282 if (!S.checkStringLiteralArgumentAttr(AL, 0, Str)) in handleBTFDeclTagAttr()
7287 D->addAttr(::new (S.Context) BTFDeclTagAttr(S.Context, AL, Str)); in handleBTFDeclTagAttr()
7290 BTFDeclTagAttr *Sema::mergeBTFDeclTagAttr(Decl *D, const BTFDeclTagAttr &AL) { in mergeBTFDeclTagAttr() argument
7291 if (hasBTFDeclTagAttr(D, AL.getBTFDeclTag())) in mergeBTFDeclTagAttr()
7293 return ::new (Context) BTFDeclTagAttr(Context, AL, AL.getBTFDeclTag()); in mergeBTFDeclTagAttr()
7296 static void handleWebAssemblyExportNameAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleWebAssemblyExportNameAttr() argument
7311 if (!S.checkStringLiteralArgumentAttr(AL, 0, Str, &ArgLoc)) in handleWebAssemblyExportNameAttr()
7314 D->addAttr(::new (S.Context) WebAssemblyExportNameAttr(S.Context, AL, Str)); in handleWebAssemblyExportNameAttr()
7319 Sema::mergeImportModuleAttr(Decl *D, const WebAssemblyImportModuleAttr &AL) { in mergeImportModuleAttr() argument
7323 if (ExistingAttr->getImportModule() == AL.getImportModule()) in mergeImportModuleAttr()
7326 << ExistingAttr->getImportModule() << AL.getImportModule(); in mergeImportModuleAttr()
7327 Diag(AL.getLoc(), diag::note_previous_attribute); in mergeImportModuleAttr()
7331 Diag(AL.getLoc(), diag::warn_import_on_definition) << 0; in mergeImportModuleAttr()
7334 return ::new (Context) WebAssemblyImportModuleAttr(Context, AL, in mergeImportModuleAttr()
7335 AL.getImportModule()); in mergeImportModuleAttr()
7339 Sema::mergeImportNameAttr(Decl *D, const WebAssemblyImportNameAttr &AL) { in mergeImportNameAttr() argument
7343 if (ExistingAttr->getImportName() == AL.getImportName()) in mergeImportNameAttr()
7346 << ExistingAttr->getImportName() << AL.getImportName(); in mergeImportNameAttr()
7347 Diag(AL.getLoc(), diag::note_previous_attribute); in mergeImportNameAttr()
7351 Diag(AL.getLoc(), diag::warn_import_on_definition) << 1; in mergeImportNameAttr()
7354 return ::new (Context) WebAssemblyImportNameAttr(Context, AL, in mergeImportNameAttr()
7355 AL.getImportName()); in mergeImportNameAttr()
7359 handleWebAssemblyImportModuleAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleWebAssemblyImportModuleAttr() argument
7364 if (!S.checkStringLiteralArgumentAttr(AL, 0, Str, &ArgLoc)) in handleWebAssemblyImportModuleAttr()
7367 S.Diag(AL.getLoc(), diag::warn_import_on_definition) << 0; in handleWebAssemblyImportModuleAttr()
7372 WebAssemblyImportModuleAttr(S.Context, AL, Str)); in handleWebAssemblyImportModuleAttr()
7376 handleWebAssemblyImportNameAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleWebAssemblyImportNameAttr() argument
7381 if (!S.checkStringLiteralArgumentAttr(AL, 0, Str, &ArgLoc)) in handleWebAssemblyImportNameAttr()
7384 S.Diag(AL.getLoc(), diag::warn_import_on_definition) << 1; in handleWebAssemblyImportNameAttr()
7388 FD->addAttr(::new (S.Context) WebAssemblyImportNameAttr(S.Context, AL, Str)); in handleWebAssemblyImportNameAttr()
7392 const ParsedAttr &AL) { in handleRISCVInterruptAttr() argument
7395 S.Diag(AL.getRange().getBegin(), in handleRISCVInterruptAttr()
7402 if (!AL.checkAtMostNumArgs(S, 1)) in handleRISCVInterruptAttr()
7409 if (AL.getNumArgs() == 0) in handleRISCVInterruptAttr()
7411 else if (!S.checkStringLiteralArgumentAttr(AL, 0, Str, &ArgLoc)) in handleRISCVInterruptAttr()
7441 S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << Str in handleRISCVInterruptAttr()
7446 D->addAttr(::new (S.Context) RISCVInterruptAttr(S.Context, AL, Kind)); in handleRISCVInterruptAttr()
7449 static void handleInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleInterruptAttr() argument
7453 handleMSP430InterruptAttr(S, D, AL); in handleInterruptAttr()
7457 handleMipsInterruptAttr(S, D, AL); in handleInterruptAttr()
7460 handleM68kInterruptAttr(S, D, AL); in handleInterruptAttr()
7464 handleAnyX86InterruptAttr(S, D, AL); in handleInterruptAttr()
7467 handleAVRInterruptAttr(S, D, AL); in handleInterruptAttr()
7471 handleRISCVInterruptAttr(S, D, AL); in handleInterruptAttr()
7474 handleARMInterruptAttr(S, D, AL); in handleInterruptAttr()
7522 const ParsedAttr &AL) { in handleAMDGPUFlatWorkGroupSizeAttr() argument
7523 Expr *MinExpr = AL.getArgAsExpr(0); in handleAMDGPUFlatWorkGroupSizeAttr()
7524 Expr *MaxExpr = AL.getArgAsExpr(1); in handleAMDGPUFlatWorkGroupSizeAttr()
7526 S.addAMDGPUFlatWorkGroupSizeAttr(D, AL, MinExpr, MaxExpr); in handleAMDGPUFlatWorkGroupSizeAttr()
7574 static void handleAMDGPUWavesPerEUAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAMDGPUWavesPerEUAttr() argument
7575 if (!AL.checkAtLeastNumArgs(S, 1) || !AL.checkAtMostNumArgs(S, 2)) in handleAMDGPUWavesPerEUAttr()
7578 Expr *MinExpr = AL.getArgAsExpr(0); in handleAMDGPUWavesPerEUAttr()
7579 Expr *MaxExpr = (AL.getNumArgs() > 1) ? AL.getArgAsExpr(1) : nullptr; in handleAMDGPUWavesPerEUAttr()
7581 S.addAMDGPUWavesPerEUAttr(D, AL, MinExpr, MaxExpr); in handleAMDGPUWavesPerEUAttr()
7584 static void handleAMDGPUNumSGPRAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAMDGPUNumSGPRAttr() argument
7586 Expr *NumSGPRExpr = AL.getArgAsExpr(0); in handleAMDGPUNumSGPRAttr()
7587 if (!checkUInt32Argument(S, AL, NumSGPRExpr, NumSGPR)) in handleAMDGPUNumSGPRAttr()
7590 D->addAttr(::new (S.Context) AMDGPUNumSGPRAttr(S.Context, AL, NumSGPR)); in handleAMDGPUNumSGPRAttr()
7593 static void handleAMDGPUNumVGPRAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAMDGPUNumVGPRAttr() argument
7595 Expr *NumVGPRExpr = AL.getArgAsExpr(0); in handleAMDGPUNumVGPRAttr()
7596 if (!checkUInt32Argument(S, AL, NumVGPRExpr, NumVGPR)) in handleAMDGPUNumVGPRAttr()
7599 D->addAttr(::new (S.Context) AMDGPUNumVGPRAttr(S.Context, AL, NumVGPR)); in handleAMDGPUNumVGPRAttr()
7603 const ParsedAttr &AL) { in handleX86ForceAlignArgPointerAttr() argument
7617 S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) in handleX86ForceAlignArgPointerAttr()
7618 << AL << ExpectedFunction; in handleX86ForceAlignArgPointerAttr()
7622 D->addAttr(::new (S.Context) X86ForceAlignArgPointerAttr(S.Context, AL)); in handleX86ForceAlignArgPointerAttr()
7625 static void handleLayoutVersion(Sema &S, Decl *D, const ParsedAttr &AL) { in handleLayoutVersion() argument
7627 Expr *VersionExpr = static_cast<Expr *>(AL.getArgAsExpr(0)); in handleLayoutVersion()
7628 if (!checkUInt32Argument(S, AL, AL.getArgAsExpr(0), Version)) in handleLayoutVersion()
7633 S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) in handleLayoutVersion()
7634 << AL << Version << VersionExpr->getSourceRange(); in handleLayoutVersion()
7643 D->addAttr(::new (S.Context) LayoutVersionAttr(S.Context, AL, Version)); in handleLayoutVersion()
7739 static void handleCapabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleCapabilityAttr() argument
7750 if (AL.getKind() == ParsedAttr::AT_Capability && in handleCapabilityAttr()
7751 !S.checkStringLiteralArgumentAttr(AL, 0, N, &LiteralLoc)) in handleCapabilityAttr()
7754 D->addAttr(::new (S.Context) CapabilityAttr(S.Context, AL, N)); in handleCapabilityAttr()
7757 static void handleAssertCapabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAssertCapabilityAttr() argument
7759 if (!checkLockFunAttrCommon(S, D, AL, Args)) in handleAssertCapabilityAttr()
7763 AssertCapabilityAttr(S.Context, AL, Args.data(), Args.size())); in handleAssertCapabilityAttr()
7767 const ParsedAttr &AL) { in handleAcquireCapabilityAttr() argument
7769 if (!checkLockFunAttrCommon(S, D, AL, Args)) in handleAcquireCapabilityAttr()
7772 D->addAttr(::new (S.Context) AcquireCapabilityAttr(S.Context, AL, Args.data(), in handleAcquireCapabilityAttr()
7777 const ParsedAttr &AL) { in handleTryAcquireCapabilityAttr() argument
7779 if (!checkTryLockFunAttrCommon(S, D, AL, Args)) in handleTryAcquireCapabilityAttr()
7783 S.Context, AL, AL.getArgAsExpr(0), Args.data(), Args.size())); in handleTryAcquireCapabilityAttr()
7787 const ParsedAttr &AL) { in handleReleaseCapabilityAttr() argument
7790 checkAttrArgsAreCapabilityObjs(S, D, AL, Args, 0, true); in handleReleaseCapabilityAttr()
7792 D->addAttr(::new (S.Context) ReleaseCapabilityAttr(S.Context, AL, Args.data(), in handleReleaseCapabilityAttr()
7797 const ParsedAttr &AL) { in handleRequiresCapabilityAttr() argument
7798 if (!AL.checkAtLeastNumArgs(S, 1)) in handleRequiresCapabilityAttr()
7803 checkAttrArgsAreCapabilityObjs(S, D, AL, Args); in handleRequiresCapabilityAttr()
7808 RequiresCapabilityAttr(S.Context, AL, Args.data(), Args.size()); in handleRequiresCapabilityAttr()
7813 static void handleDeprecatedAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleDeprecatedAttr() argument
7816 S.Diag(AL.getLoc(), diag::warn_deprecated_anonymous_namespace); in handleDeprecatedAttr()
7824 S.Diag(AL.getRange().getBegin(), diag::warn_deprecated_ignored_on_using) in handleDeprecatedAttr()
7825 << AL; in handleDeprecatedAttr()
7831 if (AL.isArgExpr(0) && AL.getArgAsExpr(0) && in handleDeprecatedAttr()
7832 !S.checkStringLiteralArgumentAttr(AL, 0, Str)) in handleDeprecatedAttr()
7836 if (AL.isDeclspecAttribute() || AL.isStandardAttributeSyntax()) in handleDeprecatedAttr()
7837 AL.checkAtMostNumArgs(S, 1); in handleDeprecatedAttr()
7838 else if (AL.isArgExpr(1) && AL.getArgAsExpr(1) && in handleDeprecatedAttr()
7839 !S.checkStringLiteralArgumentAttr(AL, 1, Replacement)) in handleDeprecatedAttr()
7842 if (!S.getLangOpts().CPlusPlus14 && AL.isCXX11Attribute() && !AL.isGNUScope()) in handleDeprecatedAttr()
7843 S.Diag(AL.getLoc(), diag::ext_cxx14_attr) << AL; in handleDeprecatedAttr()
7845 D->addAttr(::new (S.Context) DeprecatedAttr(S.Context, AL, Str, Replacement)); in handleDeprecatedAttr()
7859 static void handleNoSanitizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleNoSanitizeAttr() argument
7860 if (!AL.checkAtLeastNumArgs(S, 1)) in handleNoSanitizeAttr()
7865 for (unsigned I = 0, E = AL.getNumArgs(); I != E; ++I) { in handleNoSanitizeAttr()
7869 if (!S.checkStringLiteralArgumentAttr(AL, I, SanitizerName, &LiteralLoc)) in handleNoSanitizeAttr()
7878 << AL << ExpectedFunctionOrMethod; in handleNoSanitizeAttr()
7882 D->addAttr(::new (S.Context) NoSanitizeAttr(S.Context, AL, Sanitizers.data(), in handleNoSanitizeAttr()
7887 const ParsedAttr &AL) { in handleNoSanitizeSpecificAttr() argument
7888 StringRef AttrName = AL.getAttrName()->getName(); in handleNoSanitizeSpecificAttr()
7897 << AL << ExpectedFunction; in handleNoSanitizeSpecificAttr()
7908 if (AL.isStandardAttributeSyntax()) in handleNoSanitizeSpecificAttr()
7911 AttributeCommonInfo Info = AL; in handleNoSanitizeSpecificAttr()
7917 static void handleInternalLinkageAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleInternalLinkageAttr() argument
7918 if (InternalLinkageAttr *Internal = S.mergeInternalLinkageAttr(D, AL)) in handleInternalLinkageAttr()
7922 static void handleOpenCLNoSVMAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleOpenCLNoSVMAttr() argument
7924 S.Diag(AL.getLoc(), diag::err_attribute_requires_opencl_version) in handleOpenCLNoSVMAttr()
7925 << AL << "2.0" << 1; in handleOpenCLNoSVMAttr()
7927 S.Diag(AL.getLoc(), diag::warn_opencl_attr_deprecated_ignored) in handleOpenCLNoSVMAttr()
7928 << AL << S.LangOpts.getOpenCLVersionString(); in handleOpenCLNoSVMAttr()
7931 static void handleOpenCLAccessAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleOpenCLAccessAttr() argument
7938 AL.getSemanticSpelling()) { in handleOpenCLAccessAttr()
7939 S.Diag(AL.getLoc(), diag::warn_duplicate_declspec) in handleOpenCLAccessAttr()
7940 << AL.getAttrName()->getName() << AL.getRange(); in handleOpenCLAccessAttr()
7942 S.Diag(AL.getLoc(), diag::err_opencl_multiple_access_qualifiers) in handleOpenCLAccessAttr()
7960 if (AL.getAttrName()->getName().contains("read_write")) { in handleOpenCLAccessAttr()
7967 S.Diag(AL.getLoc(), diag::err_opencl_invalid_read_write) in handleOpenCLAccessAttr()
7968 << AL << PDecl->getType() << DeclTy->isImageType(); in handleOpenCLAccessAttr()
7975 D->addAttr(::new (S.Context) OpenCLAccessAttr(S.Context, AL)); in handleOpenCLAccessAttr()
7978 static void handleZeroCallUsedRegsAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleZeroCallUsedRegsAttr() argument
7982 if (!S.checkStringLiteralArgumentAttr(AL, 0, KindStr, &LiteralLoc)) in handleZeroCallUsedRegsAttr()
7988 << AL << KindStr; in handleZeroCallUsedRegsAttr()
7993 D->addAttr(ZeroCallUsedRegsAttr::Create(S.Context, Kind, AL)); in handleZeroCallUsedRegsAttr()
7997 const ParsedAttr &AL) { in handleFunctionReturnThunksAttr() argument
8000 if (!S.checkStringLiteralArgumentAttr(AL, 0, KindStr, &LiteralLoc)) in handleFunctionReturnThunksAttr()
8006 << AL << KindStr; in handleFunctionReturnThunksAttr()
8013 D->addAttr(FunctionReturnThunksAttr::Create(S.Context, Kind, AL)); in handleFunctionReturnThunksAttr()
8016 static void handleSYCLKernelAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleSYCLKernelAttr() argument
8052 handleSimpleAttribute<SYCLKernelAttr>(S, D, AL); in handleSYCLKernelAttr()
8068 static void handleUninitializedAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleUninitializedAttr() argument
8071 D->addAttr(::new (S.Context) UninitializedAttr(S.Context, AL)); in handleUninitializedAttr()
8112 const ParsedAttr &AL) { in handleObjCExternallyRetainedAttr() argument
8124 handleSimpleAttribute<ObjCExternallyRetainedAttr>(S, D, AL); in handleObjCExternallyRetainedAttr()
8146 handleSimpleAttribute<ObjCExternallyRetainedAttr>(S, D, AL); in handleObjCExternallyRetainedAttr()
8149 static void handleMIGServerRoutineAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleMIGServerRoutineAttr() argument
8168 handleSimpleAttribute<MIGServerRoutineAttr>(S, D, AL); in handleMIGServerRoutineAttr()
8171 static void handleMSAllocatorAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleMSAllocatorAttr() argument
8176 S.Diag(AL.getLoc(), diag::warn_declspec_allocator_nonpointer) in handleMSAllocatorAttr()
8177 << AL.getRange() << RetTy; in handleMSAllocatorAttr()
8182 handleSimpleAttribute<MSAllocatorAttr>(S, D, AL); in handleMSAllocatorAttr()
8185 static void handleAcquireHandleAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleAcquireHandleAttr() argument
8186 if (AL.isUsedAsTypeAttr()) in handleAcquireHandleAttr()
8191 S.Diag(AL.getLoc(), diag::err_attribute_output_parameter) in handleAcquireHandleAttr()
8192 << AL.getRange(); in handleAcquireHandleAttr()
8197 if (!S.checkStringLiteralArgumentAttr(AL, 0, Argument)) in handleAcquireHandleAttr()
8199 D->addAttr(AcquireHandleAttr::Create(S.Context, Argument, AL)); in handleAcquireHandleAttr()
8203 static void handleHandleAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleHandleAttr() argument
8205 if (!S.checkStringLiteralArgumentAttr(AL, 0, Argument)) in handleHandleAttr()
8207 D->addAttr(Attr::Create(S.Context, Argument, AL)); in handleHandleAttr()
8210 static void handleCFGuardAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleCFGuardAttr() argument
8213 if (!AL.isArgIdent(0)) { in handleCFGuardAttr()
8214 S.Diag(AL.getLoc(), diag::err_attribute_argument_type) in handleCFGuardAttr()
8215 << AL << AANT_ArgumentIdentifier; in handleCFGuardAttr()
8220 IdentifierInfo *II = AL.getArgAsIdent(0)->Ident; in handleCFGuardAttr()
8222 S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II; in handleCFGuardAttr()
8226 D->addAttr(::new (S.Context) CFGuardAttr(S.Context, AL, Arg)); in handleCFGuardAttr()
8241 static void handleEnforceTCBAttr(Sema &S, Decl *D, const ParsedAttr &AL) { in handleEnforceTCBAttr() argument
8243 if (!S.checkStringLiteralArgumentAttr(AL, 0, Argument)) in handleEnforceTCBAttr()
8251 S.Diag(AL.getLoc(), diag::err_tcb_conflicting_attributes) in handleEnforceTCBAttr()
8252 << AL.getAttrName()->getName() << ConflictingAttr->getAttrName()->getName() in handleEnforceTCBAttr()
8262 D->addAttr(AttrTy::Create(S.Context, Argument, AL)); in handleEnforceTCBAttr()
8266 static AttrTy *mergeEnforceTCBAttrImpl(Sema &S, Decl *D, const AttrTy &AL) { in mergeEnforceTCBAttrImpl() argument
8268 StringRef TCBName = AL.getTCBName(); in mergeEnforceTCBAttrImpl()
8273 << AL.getAttrName()->getName() << TCBName; in mergeEnforceTCBAttrImpl()
8276 S.Diag(AL.getLoc(), diag::note_conflicting_attribute); in mergeEnforceTCBAttrImpl()
8284 return ::new(Context) AttrTy(Context, AL, AL.getTCBName()); in mergeEnforceTCBAttrImpl()
8287 EnforceTCBAttr *Sema::mergeEnforceTCBAttr(Decl *D, const EnforceTCBAttr &AL) { in mergeEnforceTCBAttr() argument
8289 *this, D, AL); in mergeEnforceTCBAttr()
8293 Decl *D, const EnforceTCBLeafAttr &AL) { in mergeEnforceTCBLeafAttr() argument
8295 *this, D, AL); in mergeEnforceTCBLeafAttr()
8304 static bool MustDelayAttributeArguments(const ParsedAttr &AL) { in MustDelayAttributeArguments() argument
8306 if (!AL.acceptsExprPack()) in MustDelayAttributeArguments()
8309 bool AttrHasVariadicArg = AL.hasVariadicArg(); in MustDelayAttributeArguments()
8310 unsigned AttrNumArgs = AL.getNumArgMembers(); in MustDelayAttributeArguments()
8311 for (size_t I = 0; I < std::min(AL.getNumArgs(), AttrNumArgs); ++I) { in MustDelayAttributeArguments()
8317 Expr *E = AL.getArgAsExpr(I); in MustDelayAttributeArguments()
8318 bool ArgMemberCanHoldExpr = AL.isParamExpr(I); in MustDelayAttributeArguments()
8337 ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D, const ParsedAttr &AL, in ProcessDeclAttribute() argument
8339 if (AL.isInvalid() || AL.getKind() == ParsedAttr::IgnoredAttribute) in ProcessDeclAttribute()
8350 if (AL.getSyntax() == ParsedAttr::AS_CXX11 && !Options.IncludeCXX11Attributes) in ProcessDeclAttribute()
8356 if (AL.getKind() == ParsedAttr::UnknownAttribute || in ProcessDeclAttribute()
8357 !AL.existsInTarget(S.Context.getTargetInfo())) { in ProcessDeclAttribute()
8358 S.Diag(AL.getLoc(), in ProcessDeclAttribute()
8359 AL.isDeclspecAttribute() in ProcessDeclAttribute()
8362 << AL << AL.getRange(); in ProcessDeclAttribute()
8367 bool MustDelayArgs = MustDelayAttributeArguments(AL); in ProcessDeclAttribute()
8370 if (S.checkCommonAttributeFeatures(D, AL, MustDelayArgs)) in ProcessDeclAttribute()
8374 AL.handleAttrWithDelayedArgs(S, D); in ProcessDeclAttribute()
8378 switch (AL.getKind()) { in ProcessDeclAttribute()
8380 if (AL.getInfo().handleDeclAttribute(S, D, AL) != ParsedAttrInfo::NotHandled) in ProcessDeclAttribute()
8382 if (!AL.isStmtAttr()) { in ProcessDeclAttribute()
8383 assert(AL.isTypeAttr() && "Non-type attribute not handled"); in ProcessDeclAttribute()
8385 if (AL.isTypeAttr()) { in ProcessDeclAttribute()
8388 if (!AL.isStandardAttributeSyntax()) { in ProcessDeclAttribute()
8403 if (AL.slidesFromDeclToDeclSpecLegacyBehavior() && in ProcessDeclAttribute()
8408 if (AL.isClangScope()) { in ProcessDeclAttribute()
8409 S.Diag(AL.getLoc(), diag::warn_type_attribute_deprecated_on_decl) in ProcessDeclAttribute()
8410 << AL << D->getLocation(); in ProcessDeclAttribute()
8418 if (AL.getKind() == ParsedAttr::AT_Regparm) { in ProcessDeclAttribute()
8431 if (AL.getKind() == ParsedAttr::AT_VectorSize) { in ProcessDeclAttribute()
8441 if (AL.getKind() == ParsedAttr::AT_NoDeref) { in ProcessDeclAttribute()
8452 S.Diag(AL.getLoc(), diag::err_attribute_invalid_on_decl) in ProcessDeclAttribute()
8453 << AL << D->getLocation(); in ProcessDeclAttribute()
8456 handleInterruptAttr(S, D, AL); in ProcessDeclAttribute()
8459 handleX86ForceAlignArgPointerAttr(S, D, AL); in ProcessDeclAttribute()
8463 handleDLLAttr(S, D, AL); in ProcessDeclAttribute()
8466 handleAMDGPUFlatWorkGroupSizeAttr(S, D, AL); in ProcessDeclAttribute()
8469 handleAMDGPUWavesPerEUAttr(S, D, AL); in ProcessDeclAttribute()
8472 handleAMDGPUNumSGPRAttr(S, D, AL); in ProcessDeclAttribute()
8475 handleAMDGPUNumVGPRAttr(S, D, AL); in ProcessDeclAttribute()
8478 handleAVRSignalAttr(S, D, AL); in ProcessDeclAttribute()
8481 handleBPFPreserveAccessIndexAttr(S, D, AL); in ProcessDeclAttribute()
8484 handleBTFDeclTagAttr(S, D, AL); in ProcessDeclAttribute()
8487 handleWebAssemblyExportNameAttr(S, D, AL); in ProcessDeclAttribute()
8490 handleWebAssemblyImportModuleAttr(S, D, AL); in ProcessDeclAttribute()
8493 handleWebAssemblyImportNameAttr(S, D, AL); in ProcessDeclAttribute()
8496 handleIBOutlet(S, D, AL); in ProcessDeclAttribute()
8499 handleIBOutletCollection(S, D, AL); in ProcessDeclAttribute()
8502 handleIFuncAttr(S, D, AL); in ProcessDeclAttribute()
8505 handleAliasAttr(S, D, AL); in ProcessDeclAttribute()
8508 handleAlignedAttr(S, D, AL); in ProcessDeclAttribute()
8511 handleAlignValueAttr(S, D, AL); in ProcessDeclAttribute()
8514 handleAllocSizeAttr(S, D, AL); in ProcessDeclAttribute()
8517 handleAlwaysInlineAttr(S, D, AL); in ProcessDeclAttribute()
8520 handleAnalyzerNoReturnAttr(S, D, AL); in ProcessDeclAttribute()
8523 handleTLSModelAttr(S, D, AL); in ProcessDeclAttribute()
8526 handleAnnotateAttr(S, D, AL); in ProcessDeclAttribute()
8529 handleAvailabilityAttr(S, D, AL); in ProcessDeclAttribute()
8532 handleDependencyAttr(S, scope, D, AL); in ProcessDeclAttribute()
8536 handleCPUSpecificAttr(S, D, AL); in ProcessDeclAttribute()
8539 handleCommonAttr(S, D, AL); in ProcessDeclAttribute()
8542 handleConstantAttr(S, D, AL); in ProcessDeclAttribute()
8545 handlePassObjectSizeAttr(S, D, AL); in ProcessDeclAttribute()
8548 handleConstructorAttr(S, D, AL); in ProcessDeclAttribute()
8551 handleDeprecatedAttr(S, D, AL); in ProcessDeclAttribute()
8554 handleDestructorAttr(S, D, AL); in ProcessDeclAttribute()
8557 handleEnableIfAttr(S, D, AL); in ProcessDeclAttribute()
8560 handleErrorAttr(S, D, AL); in ProcessDeclAttribute()
8563 handleDiagnoseIfAttr(S, D, AL); in ProcessDeclAttribute()
8566 handleDiagnoseAsBuiltinAttr(S, D, AL); in ProcessDeclAttribute()
8569 handleNoBuiltinAttr(S, D, AL); in ProcessDeclAttribute()
8572 handleExtVectorTypeAttr(S, D, AL); in ProcessDeclAttribute()
8575 handleExternalSourceSymbolAttr(S, D, AL); in ProcessDeclAttribute()
8578 handleMinSizeAttr(S, D, AL); in ProcessDeclAttribute()
8581 handleOptimizeNoneAttr(S, D, AL); in ProcessDeclAttribute()
8584 handleEnumExtensibilityAttr(S, D, AL); in ProcessDeclAttribute()
8587 handleSYCLKernelAttr(S, D, AL); in ProcessDeclAttribute()
8590 handleSimpleAttribute<SYCLSpecialClassAttr>(S, D, AL); in ProcessDeclAttribute()
8593 handleFormatAttr(S, D, AL); in ProcessDeclAttribute()
8596 handleFormatArgAttr(S, D, AL); in ProcessDeclAttribute()
8599 handleCallbackAttr(S, D, AL); in ProcessDeclAttribute()
8602 handleCalledOnceAttr(S, D, AL); in ProcessDeclAttribute()
8605 handleGlobalAttr(S, D, AL); in ProcessDeclAttribute()
8608 handleDeviceAttr(S, D, AL); in ProcessDeclAttribute()
8611 handleManagedAttr(S, D, AL); in ProcessDeclAttribute()
8614 handleGNUInlineAttr(S, D, AL); in ProcessDeclAttribute()
8617 handleLaunchBoundsAttr(S, D, AL); in ProcessDeclAttribute()
8620 handleRestrictAttr(S, D, AL); in ProcessDeclAttribute()
8623 handleModeAttr(S, D, AL); in ProcessDeclAttribute()
8627 handleNonNullAttrParameter(S, PVD, AL); in ProcessDeclAttribute()
8629 handleNonNullAttr(S, D, AL); in ProcessDeclAttribute()
8632 handleReturnsNonNullAttr(S, D, AL); in ProcessDeclAttribute()
8635 handleNoEscapeAttr(S, D, AL); in ProcessDeclAttribute()
8638 handleAssumeAlignedAttr(S, D, AL); in ProcessDeclAttribute()
8641 handleAllocAlignAttr(S, D, AL); in ProcessDeclAttribute()
8644 handleOwnershipAttr(S, D, AL); in ProcessDeclAttribute()
8647 handleNakedAttr(S, D, AL); in ProcessDeclAttribute()
8650 handleNoReturnAttr(S, D, AL); in ProcessDeclAttribute()
8653 handleStandardNoReturnAttr(S, D, AL); in ProcessDeclAttribute()
8656 handleNoCfCheckAttr(S, D, AL); in ProcessDeclAttribute()
8659 if (!AL.isUsedAsTypeAttr()) in ProcessDeclAttribute()
8660 handleSimpleAttribute<NoThrowAttr>(S, D, AL); in ProcessDeclAttribute()
8663 handleSharedAttr(S, D, AL); in ProcessDeclAttribute()
8666 handleVecReturnAttr(S, D, AL); in ProcessDeclAttribute()
8669 handleObjCOwnershipAttr(S, D, AL); in ProcessDeclAttribute()
8672 handleObjCPreciseLifetimeAttr(S, D, AL); in ProcessDeclAttribute()
8675 handleObjCReturnsInnerPointerAttr(S, D, AL); in ProcessDeclAttribute()
8678 handleObjCRequiresSuperAttr(S, D, AL); in ProcessDeclAttribute()
8681 handleObjCBridgeAttr(S, D, AL); in ProcessDeclAttribute()
8684 handleObjCBridgeMutableAttr(S, D, AL); in ProcessDeclAttribute()
8687 handleObjCBridgeRelatedAttr(S, D, AL); in ProcessDeclAttribute()
8690 handleObjCDesignatedInitializer(S, D, AL); in ProcessDeclAttribute()
8693 handleObjCRuntimeName(S, D, AL); in ProcessDeclAttribute()
8696 handleObjCBoxable(S, D, AL); in ProcessDeclAttribute()
8699 handleNSErrorDomain(S, D, AL); in ProcessDeclAttribute()
8704 S.AddXConsumedAttr(D, AL, parsedAttrToRetainOwnershipKind(AL), in ProcessDeclAttribute()
8709 S, D, AL, isValidOSObjectOutParameter(D), in ProcessDeclAttribute()
8711 /*Extra Args=*/AL, /*pointer-to-OSObject-pointer*/ 3, AL.getRange()); in ProcessDeclAttribute()
8715 S, D, AL, isValidOSObjectOutParameter(D), in ProcessDeclAttribute()
8717 /*Extra Args=*/AL, /*pointer-to-OSObject-poointer*/ 3, AL.getRange()); in ProcessDeclAttribute()
8726 handleXReturnsXRetainedAttr(S, D, AL); in ProcessDeclAttribute()
8729 handleWorkGroupSize<WorkGroupSizeHintAttr>(S, D, AL); in ProcessDeclAttribute()
8732 handleWorkGroupSize<ReqdWorkGroupSizeAttr>(S, D, AL); in ProcessDeclAttribute()
8735 handleSubGroupSize(S, D, AL); in ProcessDeclAttribute()
8738 handleVecTypeHint(S, D, AL); in ProcessDeclAttribute()
8741 handleInitPriorityAttr(S, D, AL); in ProcessDeclAttribute()
8744 handlePackedAttr(S, D, AL); in ProcessDeclAttribute()
8747 handlePreferredName(S, D, AL); in ProcessDeclAttribute()
8750 handleSectionAttr(S, D, AL); in ProcessDeclAttribute()
8753 handleRandomizeLayoutAttr(S, D, AL); in ProcessDeclAttribute()
8756 handleNoRandomizeLayoutAttr(S, D, AL); in ProcessDeclAttribute()
8759 handleCodeSegAttr(S, D, AL); in ProcessDeclAttribute()
8762 handleTargetAttr(S, D, AL); in ProcessDeclAttribute()
8765 handleTargetClonesAttr(S, D, AL); in ProcessDeclAttribute()
8768 handleMinVectorWidthAttr(S, D, AL); in ProcessDeclAttribute()
8771 handleAttrWithMessage<UnavailableAttr>(S, D, AL); in ProcessDeclAttribute()
8774 handleAssumumptionAttr(S, D, AL); in ProcessDeclAttribute()
8777 handleObjCDirectAttr(S, D, AL); in ProcessDeclAttribute()
8780 handleObjCDirectMembersAttr(S, D, AL); in ProcessDeclAttribute()
8781 handleSimpleAttribute<ObjCDirectMembersAttr>(S, D, AL); in ProcessDeclAttribute()
8784 handleObjCSuppresProtocolAttr(S, D, AL); in ProcessDeclAttribute()
8787 handleUnusedAttr(S, D, AL); in ProcessDeclAttribute()
8790 handleVisibilityAttr(S, D, AL, false); in ProcessDeclAttribute()
8793 handleVisibilityAttr(S, D, AL, true); in ProcessDeclAttribute()
8796 handleWarnUnusedResult(S, D, AL); in ProcessDeclAttribute()
8799 handleWeakRefAttr(S, D, AL); in ProcessDeclAttribute()
8802 handleWeakImportAttr(S, D, AL); in ProcessDeclAttribute()
8805 handleTransparentUnionAttr(S, D, AL); in ProcessDeclAttribute()
8808 handleObjCMethodFamilyAttr(S, D, AL); in ProcessDeclAttribute()
8811 handleObjCNSObject(S, D, AL); in ProcessDeclAttribute()
8814 handleObjCIndependentClass(S, D, AL); in ProcessDeclAttribute()
8817 handleBlocksAttr(S, D, AL); in ProcessDeclAttribute()
8820 handleSentinelAttr(S, D, AL); in ProcessDeclAttribute()
8823 handleCleanupAttr(S, D, AL); in ProcessDeclAttribute()
8826 handleNoDebugAttr(S, D, AL); in ProcessDeclAttribute()
8829 handleCmseNSEntryAttr(S, D, AL); in ProcessDeclAttribute()
8849 handleCallConvAttr(S, D, AL); in ProcessDeclAttribute()
8852 handleSuppressAttr(S, D, AL); in ProcessDeclAttribute()
8856 handleLifetimeCategoryAttr(S, D, AL); in ProcessDeclAttribute()
8859 handleOpenCLAccessAttr(S, D, AL); in ProcessDeclAttribute()
8862 handleOpenCLNoSVMAttr(S, D, AL); in ProcessDeclAttribute()
8865 S.AddParameterABIAttr(D, AL, ParameterABI::SwiftContext); in ProcessDeclAttribute()
8868 S.AddParameterABIAttr(D, AL, ParameterABI::SwiftAsyncContext); in ProcessDeclAttribute()
8871 S.AddParameterABIAttr(D, AL, ParameterABI::SwiftErrorResult); in ProcessDeclAttribute()
8874 S.AddParameterABIAttr(D, AL, ParameterABI::SwiftIndirectResult); in ProcessDeclAttribute()
8877 handleInternalLinkageAttr(S, D, AL); in ProcessDeclAttribute()
8880 handleZeroCallUsedRegsAttr(S, D, AL); in ProcessDeclAttribute()
8883 handleFunctionReturnThunksAttr(S, D, AL); in ProcessDeclAttribute()
8888 handleLayoutVersion(S, D, AL); in ProcessDeclAttribute()
8891 handleUuidAttr(S, D, AL); in ProcessDeclAttribute()
8894 handleMSInheritanceAttr(S, D, AL); in ProcessDeclAttribute()
8897 handleDeclspecThreadAttr(S, D, AL); in ProcessDeclAttribute()
8902 handleHLSLNumThreadsAttr(S, D, AL); in ProcessDeclAttribute()
8905 handleHLSLSVGroupIndexAttr(S, D, AL); in ProcessDeclAttribute()
8908 handleHLSLShaderAttr(S, D, AL); in ProcessDeclAttribute()
8912 handleAbiTagAttr(S, D, AL); in ProcessDeclAttribute()
8915 handleCFGuardAttr(S, D, AL); in ProcessDeclAttribute()
8920 handleAssertExclusiveLockAttr(S, D, AL); in ProcessDeclAttribute()
8923 handleAssertSharedLockAttr(S, D, AL); in ProcessDeclAttribute()
8926 handlePtGuardedVarAttr(S, D, AL); in ProcessDeclAttribute()
8929 handleNoSanitizeAttr(S, D, AL); in ProcessDeclAttribute()
8932 handleNoSanitizeSpecificAttr(S, D, AL); in ProcessDeclAttribute()
8935 handleGuardedByAttr(S, D, AL); in ProcessDeclAttribute()
8938 handlePtGuardedByAttr(S, D, AL); in ProcessDeclAttribute()
8941 handleExclusiveTrylockFunctionAttr(S, D, AL); in ProcessDeclAttribute()
8944 handleLockReturnedAttr(S, D, AL); in ProcessDeclAttribute()
8947 handleLocksExcludedAttr(S, D, AL); in ProcessDeclAttribute()
8950 handleSharedTrylockFunctionAttr(S, D, AL); in ProcessDeclAttribute()
8953 handleAcquiredBeforeAttr(S, D, AL); in ProcessDeclAttribute()
8956 handleAcquiredAfterAttr(S, D, AL); in ProcessDeclAttribute()
8962 handleCapabilityAttr(S, D, AL); in ProcessDeclAttribute()
8965 handleRequiresCapabilityAttr(S, D, AL); in ProcessDeclAttribute()
8969 handleAssertCapabilityAttr(S, D, AL); in ProcessDeclAttribute()
8972 handleAcquireCapabilityAttr(S, D, AL); in ProcessDeclAttribute()
8975 handleReleaseCapabilityAttr(S, D, AL); in ProcessDeclAttribute()
8978 handleTryAcquireCapabilityAttr(S, D, AL); in ProcessDeclAttribute()
8983 handleConsumableAttr(S, D, AL); in ProcessDeclAttribute()
8986 handleCallableWhenAttr(S, D, AL); in ProcessDeclAttribute()
8989 handleParamTypestateAttr(S, D, AL); in ProcessDeclAttribute()
8992 handleReturnTypestateAttr(S, D, AL); in ProcessDeclAttribute()
8995 handleSetTypestateAttr(S, D, AL); in ProcessDeclAttribute()
8998 handleTestTypestateAttr(S, D, AL); in ProcessDeclAttribute()
9003 handleArgumentWithTypeTagAttr(S, D, AL); in ProcessDeclAttribute()
9006 handleTypeTagForDatatypeAttr(S, D, AL); in ProcessDeclAttribute()
9011 handleSwiftAsyncName(S, D, AL); in ProcessDeclAttribute()
9014 handleSwiftAttrAttr(S, D, AL); in ProcessDeclAttribute()
9017 handleSwiftBridge(S, D, AL); in ProcessDeclAttribute()
9020 handleSwiftError(S, D, AL); in ProcessDeclAttribute()
9023 handleSwiftName(S, D, AL); in ProcessDeclAttribute()
9026 handleSwiftNewType(S, D, AL); in ProcessDeclAttribute()
9029 handleSwiftAsyncAttr(S, D, AL); in ProcessDeclAttribute()
9032 handleSwiftAsyncError(S, D, AL); in ProcessDeclAttribute()
9037 handleXRayLogArgsAttr(S, D, AL); in ProcessDeclAttribute()
9041 handlePatchableFunctionEntryAttr(S, D, AL); in ProcessDeclAttribute()
9046 handleDestroyAttr(S, D, AL); in ProcessDeclAttribute()
9050 handleUninitializedAttr(S, D, AL); in ProcessDeclAttribute()
9054 handleObjCExternallyRetainedAttr(S, D, AL); in ProcessDeclAttribute()
9058 handleMIGServerRoutineAttr(S, D, AL); in ProcessDeclAttribute()
9062 handleMSAllocatorAttr(S, D, AL); in ProcessDeclAttribute()
9066 handleArmBuiltinAliasAttr(S, D, AL); in ProcessDeclAttribute()
9070 handleAcquireHandleAttr(S, D, AL); in ProcessDeclAttribute()
9074 handleHandleAttr<ReleaseHandleAttr>(S, D, AL); in ProcessDeclAttribute()
9078 handleHandleAttr<UseHandleAttr>(S, D, AL); in ProcessDeclAttribute()
9082 handleEnforceTCBAttr<EnforceTCBAttr, EnforceTCBLeafAttr>(S, D, AL); in ProcessDeclAttribute()
9086 handleEnforceTCBAttr<EnforceTCBLeafAttr, EnforceTCBAttr>(S, D, AL); in ProcessDeclAttribute()
9090 handleBuiltinAliasAttr(S, D, AL); in ProcessDeclAttribute()
9094 handleSimpleAttribute<UsingIfExistsAttr>(S, D, AL); in ProcessDeclAttribute()
9107 for (const ParsedAttr &AL : AttrList) in ProcessDeclAttributeList() local
9108 ProcessDeclAttribute(*this, S, D, AL, Options); in ProcessDeclAttributeList()
9178 for (const ParsedAttr &AL : AttrList) in ProcessDeclAttributeDelayed() local
9179 if (AL.getKind() == ParsedAttr::AT_TransparentUnion) { in ProcessDeclAttributeDelayed()
9180 handleTransparentUnionAttr(*this, D, AL); in ProcessDeclAttributeDelayed()
9194 for (const ParsedAttr &AL : AttrList) { in ProcessAccessDeclAttributeList() local
9195 if (AL.getKind() == ParsedAttr::AT_Annotate) { in ProcessAccessDeclAttributeList()
9196 ProcessDeclAttribute(*this, nullptr, ASDecl, AL, in ProcessAccessDeclAttributeList()
9199 Diag(AL.getLoc(), diag::err_only_annotate_after_access_spec); in ProcessAccessDeclAttributeList()
9209 for (const ParsedAttr &AL : A) { in checkUnusedDeclAttributes() local
9211 if (AL.isUsedAsTypeAttr() || AL.isInvalid()) in checkUnusedDeclAttributes()
9213 if (AL.getKind() == ParsedAttr::IgnoredAttribute) in checkUnusedDeclAttributes()
9216 if (AL.getKind() == ParsedAttr::UnknownAttribute) { in checkUnusedDeclAttributes()
9217 S.Diag(AL.getLoc(), diag::warn_unknown_attribute_ignored) in checkUnusedDeclAttributes()
9218 << AL << AL.getRange(); in checkUnusedDeclAttributes()
9220 S.Diag(AL.getLoc(), diag::warn_attribute_not_on_decl) << AL in checkUnusedDeclAttributes()
9221 << AL.getRange(); in checkUnusedDeclAttributes()
9345 for (ParsedAttr &AL : PD.getDeclarationAttributes()) { in ProcessDeclAttributes()
9346 if (AL.slidesFromDeclToDeclSpecLegacyBehavior()) { in ProcessDeclAttributes()
9351 AL.diagnoseAppertainsTo(*this, D); in ProcessDeclAttributes()
9353 NonSlidingAttrs.addAtEnd(&AL); in ProcessDeclAttributes()