// RUN: %clang_cc1 -analyze -analyzer-store=region -analyzer-constraints=range -fblocks -analyzer-opt-analyze-nested-blocks -analyzer-checker=experimental.deadcode.IdempotentOperations,osx.cocoa.RetainCount -verify %s

typedef signed char BOOL;
typedef unsigned long NSUInteger;
typedef struct _NSZone NSZone;
@protocol NSObject  - (BOOL)isEqual:(id)object;
@end

@interface NSObject {}
  @property int locked;
  @property(nonatomic, readonly) NSObject *media;
@end

// <rdar://problem/8725041> - Don't flag idempotent operation warnings when
// a method may invalidate an instance variable.
@interface Rdar8725041 : NSObject {
  id _attribute;
}
  - (void) method2;
@end

@implementation Rdar8725041
- (BOOL) method1 {
  BOOL needsUpdate = (BOOL)0;
  id oldAttribute = _attribute;
  [self method2];
  needsUpdate |= (_attribute != oldAttribute); // no-warning
  return needsUpdate;
}

- (void) method2
{
  _attribute = ((void*)0);
}
@end

// Test that the idempotent operations checker works in the prescence
// of property expressions.
void pr9116(NSObject *placeholder) {
  int x = placeholder.media.locked = placeholder ? 1 : 0;
}

// <rdar://problem/9130239>: Test that calling property setters doesn't 
// trigger an assertion failure when the object is nil.
@interface RDar9130239
@property (assign) id delegate;
@end

void test_RDar9130239(RDar9130239 *x) {
  if (x)
    return;
  x.delegate = x; // no-warning
}

