[cfe-dev] [Clang 3.0] Inconsistent warnings about assignment in a condition

John McCall rjmccall at apple.com
Fri Mar 16 14:41:34 PDT 2012


On Mar 16, 2012, at 2:34 PM, jahanian wrote:
> On Mar 16, 2012, at 1:45 PM, John McCall wrote:
>> On Mar 16, 2012, at 12:44 AM, Alexei Sholik wrote:
>>> I can't find a way to make Clang _always_ trigger warnings about
>>> assignment inside a condition. When I create a new project (Mac or
>>> iOS) in Xcode 4.3.1 and compile it, the following code does not
>>> trigger any warnings:
>>> 
>>> - (id)init
>>> {
>>>  if (self = [super init]) {
>>>      // ...
>>>  }
>>>  return self;
>>> }
>> 
>> We wanted to enable -Wparentheses by default, but we got a lot of pushback
>> over this specific idiom (particularly since Apple puts out example code
>> with this verbatim), so we moved it to a subgroup -Widiomatic-parentheses
>> that is not enabled by default.  If you specifically enable -Wparentheses
>> instead of relying on the default behavior, you should see warnings about
>> this.
>> 
>>> BUT, in the same project I don't get any warnings in the following case:
>>> 
>>>      if (self.uid = 11) {
>>>          // ...
>>>      }
>>> 
>>> Is this behavior expected? Which flag should I use in order for the
>>> compiler to catch this case too?
>> 
>> This is an oversight caused by a recent refactor;  please file a bug.
> 
> Do we issue a warning if self.uid is a c++object and '=' is overloaded?

Good question.  We should.

John.



More information about the cfe-dev mailing list