================ @@ -4912,3 +4922,279 @@ void AutoType::Profile(llvm::FoldingSetNodeID &ID, const ASTContext &Context) { Profile(ID, Context, getDeducedType(), getKeyword(), isDependentType(), getTypeConstraintConcept(), getTypeConstraintArguments()); } + +FunctionEffect::~FunctionEffect() = default; + +bool FunctionEffect::diagnoseConversion(bool Adding, QualType OldType, + FunctionEffectSet OldFX, + QualType NewType, + FunctionEffectSet NewFX) const { + return false; +} + +bool FunctionEffect::diagnoseRedeclaration(bool Adding, + const FunctionDecl &OldFunction, + FunctionEffectSet OldFX, + const FunctionDecl &NewFunction, + FunctionEffectSet NewFX) const { + return false; +} + +bool FunctionEffect::diagnoseMethodOverride(bool Adding, + const CXXMethodDecl &OldMethod, + FunctionEffectSet OldFX, + const CXXMethodDecl &NewMethod, + FunctionEffectSet NewFX) const { + return false; +} + +bool FunctionEffect::canInferOnDecl(const Decl *Caller, + FunctionEffectSet CallerFX) const { + return false; +} + +bool FunctionEffect::diagnoseFunctionCall(bool Direct, const Decl *Caller, + FunctionEffectSet CallerFX, + CalleeDeclOrType Callee, + FunctionEffectSet CalleeFX) const { + return false; +} + +const NoLockNoAllocEffect &NoLockNoAllocEffect::nolock_instance() { + static NoLockNoAllocEffect global(kNoLockTrue, "nolock"); + return global; +} ---------------- Sirraide wrote:
With the `[[]]` syntax, attributes that appertain to a function declaration come before the return type, and attributes that appertain to the function type come after the parameter list, yeah. Looking at this again, `AttributedType` makes sense for this, I’d say. `DeclOrTypeAttr` is probably fine for this, because I don’t think you can put a `TypeAttr` *before* a function if you want to be able to do that, but if you don’t care about that being possible, then a `TypeAttr` is probably simpler. So, to get back to what this comment was originally about, if I understand the situation correctly, you can attach `nolock`/`noalloc` (optionally w/ an expression argument) to function types. This is done using `AttributedType`s, which makes sense. The presence/absence of these attributes may affect how effects are inferred. At the same time, we would also like to track effects on the `FunctionProtoType`, so what I’m thinking is, it may it be possible to use only the attributes for inference, and track effects as a bitmask on the `FunctionProtoType` (see also the comment I made about this further down wrt one of the questions in your initial pr comment). With all of that in mind, it’s not quite clear to me what purpose the `nolock_instance()` serves in all of this? https://github.com/llvm/llvm-project/pull/84983 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits