On 12 Dec 2013, at 12:52, 2551 <2551p...@gmail.com> wrote:

> Hi folks
> 
> I need some help with a logic error the Static Analyzer is throwing up. I 
> didn’t write this code (in fact, its a piece of Apple sample code I’m resuing 
> in my project), and I’m not quite sure how to correct it. It goes like this, 
> where the numbers [1], [2], [3], [4] represent the end points of the 
> analyzer's blue arrows:
> 
>   [1] const NSRect bounds = [self bounds];
> 
>    [backgroundColor set];
>    NSRectFill(dirtyRect);
> 
>    const NSRulerOrientation orientation = [self orientation];
>    NSRect borderLineRect;
>    [2] switch (orientation) {
>        case NSVerticalRuler:
>            borderLineRect = NSMakeRect(NSMaxX(bounds)-1.0, 0, 1.0, 
> NSHeight(bounds));
>            break;
>        case NSHorizontalRuler:
>            borderLineRect = NSMakeRect(0, 0, NSWidth(bounds), 1.0);
>            break;
>    }
> 
>    [3]if [4]([self needsToDrawRect:borderLineRect]) {
>        [[backgroundColor shadowWithLevel:0.4] set];
>        NSRectFill(borderLineRect);
> 
> The error message says, in full: Passed-by-value struct argument contains 
> uninitialized data (e.g., via the field chain: 'origin.x’). 


 NSRulerOrientation is typedefed as an NSUInteger. So I suppose the Static 
Analyzer doesn't know that it can only be those two values. I suppose you could 
fix the warning by either initializing borderLineRect = NSZeroRect; or by 
adding a default: case to the switch that does this. I guess Apple hasn't yet 
gotten around to turning NSRulerOrientation into one of those new-fangled 
NS_ENUMs, and since the enum is anonymous, you can't declare your variable as 
enum _NSRulerOrientation or the like either, to tell the Analyzer that there 
are only two possible values for this variable.

 Alternately, you could add an NSCAssert() that simply croaks if the 
orientation is anything but these two values. Then the Analyzer will know there 
can only be those two cases.

-- Uli Kusterer
"The Witnesses of TeachText are everywhere..."




_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to