On Jul 27, 2012, at 3:49 PM, Jordan Rose wrote:

> Hm. Here's that whole function (before the change):
> 
> ACCResult checkCallToFunction(FunctionDecl *fn) {
>   // Require a CF*Ref return type.
>   if (!isCFType(fn->getResultType()))
>     return ACC_invalid;
> 
>   if (!isAnyRetainable(TargetClass))
>     return ACC_invalid;
> 
>   // Honor an explicit 'not retained' attribute.
>   if (fn->hasAttr<CFReturnsNotRetainedAttr>())
>     return ACC_plusZero;
> 
>   // Honor an explicit 'retained' attribute, except that for
>   // now we're not going to permit implicit handling of +1 results,
>   // because it's a bit frightening.
>   if (fn->hasAttr<CFReturnsRetainedAttr>())
>     return ACC_invalid; // ACC_plusOne if we start accepting this
> 
>   // Recognize this specific builtin function, which is used by CFSTR.
>   unsigned builtinID = fn->getBuiltinID();
>   if (builtinID == Builtin::BI__builtin___CFStringMakeConstantString)
>     return ACC_bottom;
> 
>   // Otherwise, don't do anything implicit with an unaudited function.
>   if (!fn->hasAttr<CFAuditedTransferAttr>())
>     return ACC_invalid;
> 
>   // Otherwise, it's +0 unless it follows the create convention.
>   if (ento::coreFoundation::followsCreateRule(fn))
>     return ACC_invalid; // ACC_plusOne if we start accepting this
> 
>   return ACC_plusZero;
> }
> 
> I wonder if leaving the "followsCreateRule" after the CFAuditedTransferAttr 
> check would be better; relying on the naming convention for un-audited code 
> may be a bad idea even

If I leave it after, then CFAuditedTransferAttr check would not get me to check 
for the naming convention. Note that since in the non-diagnose case they both 
return
ACC_invalid, this will not change the behavior.


> for fixits. On the other hand, we can go ahead and turn on the 
> CFReturnsRetainedAttr case (for diagnostics only, of course), since if that 
> attribute was added the semantics of the function have implicitly been 
> audited.
OK.

> 
> On the plus side, you should be able to check for ACC_plusZero as well, and 
> only suggest __bridge in that case.
OK.

- Fariborz

> 
> 

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to