196e7813f08c6adf1d8657b0da86741b54e850fd7Rafael Espindola// RUN: not %clang_cc1 -fsyntax-only %s -std=c++11 2>&1| FileCheck %s
20167f3c25581c39cd024d7a924553959c4893381Douglas Gregor
30167f3c25581c39cd024d7a924553959c4893381Douglas Gregor// Note that the error count below doesn't matter. We just want to
40167f3c25581c39cd024d7a924553959c4893381Douglas Gregor// make sure that the parser doesn't crash.
533b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman// CHECK: 16 errors
69625e44c0252485277a340746ed8ac950686156fDouglas Gregor
79625e44c0252485277a340746ed8ac950686156fDouglas Gregor// PR7511
80167f3c25581c39cd024d7a924553959c4893381Douglas Gregortemplate<a>
90167f3c25581c39cd024d7a924553959c4893381Douglas Gregorstruct int_;
100167f3c25581c39cd024d7a924553959c4893381Douglas Gregor
110167f3c25581c39cd024d7a924553959c4893381Douglas Gregortemplate<a>
120167f3c25581c39cd024d7a924553959c4893381Douglas Gregortemplate<int,typename T1,typename>
130167f3c25581c39cd024d7a924553959c4893381Douglas Gregorstruct ac
140167f3c25581c39cd024d7a924553959c4893381Douglas Gregor{
150167f3c25581c39cd024d7a924553959c4893381Douglas Gregor  typedef T1 ae
160167f3c25581c39cd024d7a924553959c4893381Douglas Gregor};
170167f3c25581c39cd024d7a924553959c4893381Douglas Gregor
180167f3c25581c39cd024d7a924553959c4893381Douglas Gregortemplate<class>struct aaa
190167f3c25581c39cd024d7a924553959c4893381Douglas Gregor{
200167f3c25581c39cd024d7a924553959c4893381Douglas Gregor  typedef ac<1,int,int>::ae ae
210167f3c25581c39cd024d7a924553959c4893381Douglas Gregor};
220167f3c25581c39cd024d7a924553959c4893381Douglas Gregor
230167f3c25581c39cd024d7a924553959c4893381Douglas Gregortemplate<class>
240167f3c25581c39cd024d7a924553959c4893381Douglas Gregorstruct state_machine
250167f3c25581c39cd024d7a924553959c4893381Douglas Gregor{
260167f3c25581c39cd024d7a924553959c4893381Douglas Gregor  typedef aaa<int>::ae aaa;
270167f3c25581c39cd024d7a924553959c4893381Douglas Gregor  int start()
280167f3c25581c39cd024d7a924553959c4893381Douglas Gregor  {
290167f3c25581c39cd024d7a924553959c4893381Douglas Gregor    ant(0);
300167f3c25581c39cd024d7a924553959c4893381Douglas Gregor  }
310167f3c25581c39cd024d7a924553959c4893381Douglas Gregor
320167f3c25581c39cd024d7a924553959c4893381Douglas Gregor  template<class>
330167f3c25581c39cd024d7a924553959c4893381Douglas Gregor  struct region_processing_helper
340167f3c25581c39cd024d7a924553959c4893381Douglas Gregor  {
350167f3c25581c39cd024d7a924553959c4893381Douglas Gregor    template<class,int=0>
360167f3c25581c39cd024d7a924553959c4893381Douglas Gregor    struct In;
370167f3c25581c39cd024d7a924553959c4893381Douglas Gregor
380167f3c25581c39cd024d7a924553959c4893381Douglas Gregor    template<int my>
390167f3c25581c39cd024d7a924553959c4893381Douglas Gregor    struct In<a::int_<aaa::a>,my>;
400167f3c25581c39cd024d7a924553959c4893381Douglas Gregor
410167f3c25581c39cd024d7a924553959c4893381Douglas Gregor    template<class Event>
420167f3c25581c39cd024d7a924553959c4893381Douglas Gregor    int process(Event)
430167f3c25581c39cd024d7a924553959c4893381Douglas Gregor    {
440167f3c25581c39cd024d7a924553959c4893381Douglas Gregor      In<a::int_<0> > a;
450167f3c25581c39cd024d7a924553959c4893381Douglas Gregor    }
460167f3c25581c39cd024d7a924553959c4893381Douglas Gregor  }
470167f3c25581c39cd024d7a924553959c4893381Douglas Gregor  template<class Event>
480167f3c25581c39cd024d7a924553959c4893381Douglas Gregor  int ant(Event)
490167f3c25581c39cd024d7a924553959c4893381Douglas Gregor  {
500167f3c25581c39cd024d7a924553959c4893381Douglas Gregor    region_processing_helper<int>* helper;
510167f3c25581c39cd024d7a924553959c4893381Douglas Gregor    helper->process(0)
520167f3c25581c39cd024d7a924553959c4893381Douglas Gregor  }
530167f3c25581c39cd024d7a924553959c4893381Douglas Gregor};
540167f3c25581c39cd024d7a924553959c4893381Douglas Gregor
550167f3c25581c39cd024d7a924553959c4893381Douglas Gregorint a()
560167f3c25581c39cd024d7a924553959c4893381Douglas Gregor{
570167f3c25581c39cd024d7a924553959c4893381Douglas Gregor  state_machine<int> p;
580167f3c25581c39cd024d7a924553959c4893381Douglas Gregor  p.ant(0);
590167f3c25581c39cd024d7a924553959c4893381Douglas Gregor}
609625e44c0252485277a340746ed8ac950686156fDouglas Gregor
619625e44c0252485277a340746ed8ac950686156fDouglas Gregor// PR9974
629625e44c0252485277a340746ed8ac950686156fDouglas Gregortemplate <int> struct enable_if;
639625e44c0252485277a340746ed8ac950686156fDouglas Gregortemplate <class > struct remove_reference ;
649625e44c0252485277a340746ed8ac950686156fDouglas Gregortemplate <class _Tp> struct remove_reference<_Tp&> ;
659625e44c0252485277a340746ed8ac950686156fDouglas Gregor
669625e44c0252485277a340746ed8ac950686156fDouglas Gregortemplate <class > struct __tuple_like;
679625e44c0252485277a340746ed8ac950686156fDouglas Gregor
689625e44c0252485277a340746ed8ac950686156fDouglas Gregortemplate <class _Tp, class _Up, int = __tuple_like<typename remove_reference<_Tp>::type>::value>
699625e44c0252485277a340746ed8ac950686156fDouglas Gregorstruct __tuple_convertible;
709625e44c0252485277a340746ed8ac950686156fDouglas Gregor
719625e44c0252485277a340746ed8ac950686156fDouglas Gregorstruct pair
729625e44c0252485277a340746ed8ac950686156fDouglas Gregor{
739625e44c0252485277a340746ed8ac950686156fDouglas Gregortemplate<class _Tuple, int = enable_if<__tuple_convertible<_Tuple, pair>::value>::type>
749625e44c0252485277a340746ed8ac950686156fDouglas Gregorpair(_Tuple&& );
759625e44c0252485277a340746ed8ac950686156fDouglas Gregor};
769625e44c0252485277a340746ed8ac950686156fDouglas Gregor
779625e44c0252485277a340746ed8ac950686156fDouglas Gregortemplate <class> struct basic_ostream;
789625e44c0252485277a340746ed8ac950686156fDouglas Gregor
799625e44c0252485277a340746ed8ac950686156fDouglas Gregortemplate <int>
809625e44c0252485277a340746ed8ac950686156fDouglas Gregorvoid endl( ) ;
819625e44c0252485277a340746ed8ac950686156fDouglas Gregor
829625e44c0252485277a340746ed8ac950686156fDouglas Gregorextern basic_ostream<char> cout;
839625e44c0252485277a340746ed8ac950686156fDouglas Gregor
849625e44c0252485277a340746ed8ac950686156fDouglas Gregorint operator<<( basic_ostream<char> , pair ) ;
859625e44c0252485277a340746ed8ac950686156fDouglas Gregor
869625e44c0252485277a340746ed8ac950686156fDouglas Gregorvoid register_object_imp ( )
879625e44c0252485277a340746ed8ac950686156fDouglas Gregor{
889625e44c0252485277a340746ed8ac950686156fDouglas Gregorcout << endl<1>;
899625e44c0252485277a340746ed8ac950686156fDouglas Gregor}
90ae19fbba559d8199d1f2b7154863180b0ae22ac7Douglas Gregor
91ae19fbba559d8199d1f2b7154863180b0ae22ac7Douglas Gregor// PR12933
92ae19fbba559d8199d1f2b7154863180b0ae22ac7Douglas Gregornamespacae PR12933 {
93ae19fbba559d8199d1f2b7154863180b0ae22ac7Douglas Gregor  template<typename S>
94ae19fbba559d8199d1f2b7154863180b0ae22ac7Douglas Gregor    template<typename T>
95ae19fbba559d8199d1f2b7154863180b0ae22ac7Douglas Gregor    void function(S a, T b) {}
96ae19fbba559d8199d1f2b7154863180b0ae22ac7Douglas Gregor
97ae19fbba559d8199d1f2b7154863180b0ae22ac7Douglas Gregor  int main() {
98ae19fbba559d8199d1f2b7154863180b0ae22ac7Douglas Gregor    function(0, 1);
99ae19fbba559d8199d1f2b7154863180b0ae22ac7Douglas Gregor    return 0;
100ae19fbba559d8199d1f2b7154863180b0ae22ac7Douglas Gregor  }
101ae19fbba559d8199d1f2b7154863180b0ae22ac7Douglas Gregor}
102919a2d7a63eec8f6e1e95e85306e0dc21ef91883Eli Friedman
103919a2d7a63eec8f6e1e95e85306e0dc21ef91883Eli Friedman// A buildbot failure from libcxx
104919a2d7a63eec8f6e1e95e85306e0dc21ef91883Eli Friedmannamespace libcxx_test {
105919a2d7a63eec8f6e1e95e85306e0dc21ef91883Eli Friedman  template <class _Ptr, bool> struct __pointer_traits_element_type;
106919a2d7a63eec8f6e1e95e85306e0dc21ef91883Eli Friedman  template <class _Ptr> struct __pointer_traits_element_type<_Ptr, true>;
107919a2d7a63eec8f6e1e95e85306e0dc21ef91883Eli Friedman  template <template <class, class...> class _Sp, class _Tp, class ..._Args> struct __pointer_traits_element_type<_Sp<_Tp, _Args...>, true> {
108919a2d7a63eec8f6e1e95e85306e0dc21ef91883Eli Friedman    typedef char type;
109919a2d7a63eec8f6e1e95e85306e0dc21ef91883Eli Friedman  };
110919a2d7a63eec8f6e1e95e85306e0dc21ef91883Eli Friedman  template <class T> struct B {};
111919a2d7a63eec8f6e1e95e85306e0dc21ef91883Eli Friedman  __pointer_traits_element_type<B<int>, true>::type x;
112919a2d7a63eec8f6e1e95e85306e0dc21ef91883Eli Friedman}
11333b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman
11433b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedmannamespace PR14281_part1 {
11533b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman  template <class P, int> struct A;
11633b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman  template <class P> struct A<P, 1>;
11733b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman  template <template <class, int> class S, class T> struct A<S<T, 1>, 1> {
11833b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman    typedef char type;
11933b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman  };
12033b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman  template <class T, int i> struct B {};
12133b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman  A<B<int, 1>, 1>::type x;
12233b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman}
12333b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman
12433b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedmannamespace PR14281_part2 {
12533b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman  typedef decltype(nullptr) nullptr_t;
12633b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman  template <class P, nullptr_t> struct A;
12733b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman  template <class P> struct A<P, nullptr>;
12833b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman  template <template <class, nullptr_t> class S, class T> struct A<S<T, nullptr>, nullptr> {
12933b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman    typedef char type;
13033b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman  };
13133b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman  template <class T, nullptr_t i> struct B {};
13233b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman  A<B<int, nullptr>, nullptr>::type x;
13333b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman}
13433b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman
13533b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedmannamespace PR14281_part3 {
13633b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman  extern int some_decl;
13733b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman  template <class P, int*> struct A;
13833b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman  template <class P> struct A<P, &some_decl>;
13933b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman  template <template <class, int*> class S, class T> struct A<S<T, &some_decl>, &some_decl> {
14033b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman    typedef char type;
14133b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman  };
14233b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman  template <class T, int* i> struct B {};
14333b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman  A<B<int, &some_decl>, &some_decl>::type x;
14433b90b34990a7738adebae30ef7ebf9d578ce9aeEli Friedman}
145