Re: New warning in Xcode 7
Re: New warning in Xcode 7
- Subject: Re: New warning in Xcode 7
- From: Greg Parker <email@hidden>
- Date: Tue, 13 Oct 2015 15:50:26 -0700
> On Oct 13, 2015, at 3:24 PM, Graham Cox <email@hidden> wrote:
>
> In a piece of code I haven’t worked on in a while, I’m suddenly getting a new warning which I’ve never seen before:
>
> “Multiple unsequenced modifications to ‘ix’”
>
> Code is:
>
> ix = ++ix % guess.count;
>
> where ix is a NSUInteger.
>
> Is this telling me that the order of the preincrement and the mod operation is undefined? Surely a preincrement is defined to happen first, that’s why it’s called a PREincrement? Or does the warning refer to something else? I’ve used this form of expression for years without any issues, why is it suddenly one?
The mod operator uses the value after the increment. That part is well-defined.
The compiler is complaining about the two stores to `ix`, one from the preincrement and one from operator =. Storing to the same location twice in the same statement is undefined in many cases: the language does not specify which one wins. Look up "sequence point" for more details (although the current language standards no longer use the "sequence point" terminology).
I thought that this particular form was allowed, but I'm not enough of a language lawyer to know for sure. You might get better answers from a compiler mailing list.
You can avoid confusion (human and compiler) by writing the statement without the preincrement's side effect:
ix = (ix+1) % guess.count;
--
Greg Parker email@hidden Runtime Wrangler
_______________________________________________
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