// RUN: %clang_cc1 -std=c++11 %s -emit-pch -o %t.pch
// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -include-pch %t.pch -verify
// expected-no-diagnostics

// rdar://12631281
// This reduced test case exposed a use-after-free memory bug, which was reliable
// reproduced only on guarded malloc (and probably valgrind).

#ifndef HEADER
#define HEADER

template < class _T2> struct  is_convertible;
template <> struct is_convertible<int> { typedef int type; };

template <class _T1, class _T2> struct  pair {
  typedef _T1 first_type;
  typedef _T2 second_type;
  template <class _U1, class _U2, class = typename is_convertible< first_type>::type>
    pair(_U1&& , _U2&& ); // expected-note {{candidate}}
};

template <class _ForwardIterator>
pair<_ForwardIterator, _ForwardIterator> __equal_range(_ForwardIterator) {
  return pair<_ForwardIterator, _ForwardIterator>(0, 0); // expected-error {{no matching constructor}}
}

template <class _ForwardIterator>
pair<_ForwardIterator, _ForwardIterator> equal_range( _ForwardIterator a) {
  return __equal_range(a); // expected-note {{instantiation}}
}

class A {
  pair<int, int> range() {
    return equal_range(0); // expected-note {{instantiation}}
  }
};

#else

#endif
