[cfe-dev] propagating checker state for duration of a block

Richard tarka.t.otter at googlemail.com
Mon Dec 17 10:13:27 PST 2012


you are right of course, not thinking correctly. that makes things a lot easier.

On 17 Dec 2012, at 18:52, Jordan Rose <jordan_rose at apple.com> wrote:

> 
> On Dec 17, 2012, at 9:48 , Richard <tarka.t.otter at googlemail.com> wrote:
> 
>> well, the idea is to set state if a branch condition is checking for availability, eg
>> 
>> if ([foo respondsToSelector:@selector(onlyAvailableInIOS6:)]) {
>>  // set availability version
>>  doIOS6Stuff();
>> else {
>>  // issue a warning here
>>  doIOS6Stuff();
>> }
>> 
>> so a warning can be issued if there is are any methods used newer than the minimum deployment target that are being used without checking for their availability.
>> 
>> clearly here the state has to be cleared at the end of if {}, otherwise the checker will just assume that all successive calls in the graph have checked for availability already. what would you suggest as a good way of clearing the state once the ifstmt is complete?
> 
> Well, no, it doesn't have to be. If I write this:
> 
>> if ([foo respondsToSelector:@selector(onlyAvailableInIOS6:)]) {
>>   doIOS6Stuff();
>> }
>> 
>> doMoreIOS6Stuff();
> 
> The call to 'doMoreIOS6Stuff' will be analyzed twice: once along the true-path from the if-statement, and once along the false-path. So you'd still get a warning on the false path, even though the true path would be quiet. And this is actually what you want for the early return case:
> 
>> if (![foo respondsToSelector:@selector(onlyAvailableInIOS6:)])
>>   return;
>> doIOS6Stuff();
> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20121217/875e65f4/attachment.html>


More information about the cfe-dev mailing list