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