// RUN: %clang_cc1 -fsyntax-only -verify %s
// expected-no-diagnostics

// REQUIRES: LP64

@interface G
@end

@interface F
- (void)bar:(id *)objects;
- (void)foo:(G**)objects;
@end


void a() {
	F *b;
	G **keys;
	[b bar:keys];

	id *PID;
	[b foo:PID];

}


// pr7936
@interface I1 @end

class Wrapper {
public:
  operator id() const { return (id)_value; }
  operator Class() const { return (Class)_value; }
  operator I1*() const { return (I1*)_value; }

  bool Compare(id obj) { return *this == obj; }
  bool CompareClass(Class obj) { return *this == obj; }
  bool CompareI1(I1* obj) { return *this == obj; }

  Wrapper &operator*();
  Wrapper &operator[](int);
  Wrapper& operator->*(int);

private:
  long _value;
};

void f() {
  Wrapper w;
  w[0];
  *w;
  w->*(0);
}
