[clang] [clang][ThreadSafety] Warn when constructor is trylock (PR #95290)
Aaron Ballman via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 18 05:44:00 PDT 2024
================
@@ -614,9 +619,23 @@ static bool checkTryLockFunAttrCommon(Sema &S, Decl *D, const ParsedAttr &AL,
return false;
}
- // check that all arguments are lockable objects
+ // Check that all remaining arguments are lockable objects.
checkAttrArgsAreCapabilityObjs(S, D, AL, Args, 1);
+ // Check that the attribute is applied to a function.
+ if (!D->isFunctionOrFunctionTemplate()) {
+ return false;
+ }
+ // Check that the function returns a boolean, integer, or pointer.
+ QualType ReturnType = D->getAsFunction()->getReturnType();
+ if (!ReturnType->isBooleanType() && !ReturnType->isIntegerType() &&
+ !ReturnType->isPointerType()) {
+ S.Diag(AL.getLoc(), diag::err_attribute_wrong_decl_type)
+ << AL << AL.isRegularKeywordAttribute()
+ << ExpectedFunctionReturningBoolIntegerOrPointer;
+ return false;
+ }
+
return true;
}
----------------
AaronBallman wrote:
Should we flip the logic here so we're looking for:
```
if (ReturnType->isBooleanType() || ReturnType->isIntegerType()...)
return true;
return !S.Diag(...);
```
https://github.com/llvm/llvm-project/pull/95290
More information about the cfe-commits
mailing list