Re: help with logic error
Re: help with logic error
- Subject: Re: help with logic error
- From: Uli Kusterer <email@hidden>
- Date: Thu, 12 Dec 2013 13:04:18 +0100
On 12 Dec 2013, at 12:52, 2551 <email@hidden> 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 (email@hidden)
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:
This email sent to email@hidden