// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
struct Data { };
struct T {
  Data *begin();
  Data *end();
};

struct NoBegin {
  Data *end();
};

struct DeletedEnd : public T {
  Data *begin();
  Data *end() = delete; //expected-note {{'end' has been explicitly marked deleted here}}
};

struct DeletedADLBegin { };

int* begin(DeletedADLBegin) = delete; //expected-note {{candidate function has been explicitly deleted}} \
 expected-note 6 {{candidate function not viable: no known conversion}}

struct PrivateEnd {
  Data *begin();

 private:
  Data *end(); // expected-note 2 {{declared private here}}
};

struct ADLNoEnd { };
Data * begin(ADLNoEnd); // expected-note 7 {{candidate function not viable: no known conversion}}

struct OverloadedStar {
  T operator*();
};

void f() {
  T t;
  for (auto i : t) { }
  T *pt;
  for (auto i : pt) { } // expected-error{{invalid range expression of type 'T *'; did you mean to dereference it with '*'?}}

  int arr[10];
  for (auto i : arr) { }
  int (*parr)[10];
  for (auto i : parr) { }// expected-error{{invalid range expression of type 'int (*)[10]'; did you mean to dereference it with '*'?}}

  NoBegin NB;
  for (auto i : NB) { }// expected-error{{invalid range expression of type 'NoBegin'; no viable 'begin' function available}}
  NoBegin *pNB;
  for (auto i : pNB) { }// expected-error{{invalid range expression of type 'NoBegin *'; no viable 'begin' function available}}
  NoBegin **ppNB;
  for (auto i : ppNB) { }// expected-error{{invalid range expression of type 'NoBegin **'; no viable 'begin' function available}}
  NoBegin *****pppppNB;
  for (auto i : pppppNB) { }// expected-error{{invalid range expression of type 'NoBegin *****'; no viable 'begin' function available}}

  ADLNoEnd ANE;
  for (auto i : ANE) { } // expected-error{{invalid range expression of type 'ADLNoEnd'; no viable 'end' function available}}
  ADLNoEnd *pANE;
  for (auto i : pANE) { } // expected-error{{invalid range expression of type 'ADLNoEnd *'; no viable 'begin' function available}}

  DeletedEnd DE;
  for (auto i : DE) { } // expected-error{{attempt to use a deleted function}} \
expected-note {{when looking up 'end' function for range expression of type 'DeletedEnd'}}
  DeletedEnd *pDE;

  for (auto i : pDE) { } // expected-error {{invalid range expression of type 'DeletedEnd *'; no viable 'begin' function available}}

  PrivateEnd PE;
  // FIXME: This diagnostic should be improved, as it does not specify that
  // the range is invalid.
  for (auto i : PE) { } // expected-error{{'end' is a private member of 'PrivateEnd'}}

  PrivateEnd *pPE;
  for (auto i : pPE) { }// expected-error {{invalid range expression of type 'PrivateEnd *'}}
  // expected-error@-1 {{'end' is a private member of 'PrivateEnd'}}

  DeletedADLBegin DAB;
  for (auto i : DAB) { } // expected-error {{call to deleted function 'begin'}}\
  expected-note {{when looking up 'begin' function for range expression of type 'DeletedADLBegin'}}

  OverloadedStar OS;
  for (auto i : *OS) { }

  for (auto i : OS) { } // expected-error {{invalid range expression of type 'OverloadedStar'; did you mean to dereference it with '*'?}}

  for (Data *p : pt) { } // expected-error {{invalid range expression of type 'T *'; did you mean to dereference it with '*'?}}
  // expected-error@-1 {{no viable conversion from 'Data' to 'Data *'}}
  // expected-note@4 {{selected 'begin' function with iterator type 'Data *'}}
}
