1025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor// RUN: %clang_cc1 -fsyntax-only -verify %s 2025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor 3025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor// <rdar://problem/8124080> 4025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregortemplate<typename _Alloc> class allocator; 5025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregortemplate<class _CharT> struct char_traits; 6025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregortemplate<typename _CharT, typename _Traits = char_traits<_CharT>, 7025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor typename _Alloc = allocator<_CharT> > 8025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregorclass basic_string; 9025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregortemplate<typename _CharT, typename _Traits, typename _Alloc> 10025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregorconst typename basic_string<_CharT, _Traits, _Alloc>::size_type 11025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregorbasic_string<_CharT, _Traits, _Alloc>::_Rep::_S_max_size // expected-error{{no member named '_Rep' in 'basic_string<_CharT, _Traits, _Alloc>'}} 12025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor = (((npos - sizeof(_Rep_base))/sizeof(_CharT)) - 1) / 4; 13025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor 14025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor// PR7118 15025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregortemplate<typename T> 16025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregorclass Foo { 17025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor class Bar; 18025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor void f() { 19025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor Bar i; 20025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor } 21025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor}; 226a622dfde49ff06df4e0487fa9782a9a137971acArgyrios Kyrtzidis 236a622dfde49ff06df4e0487fa9782a9a137971acArgyrios Kyrtzidis// PR7625 246a622dfde49ff06df4e0487fa9782a9a137971acArgyrios Kyrtzidistemplate<typename T> struct a : T { 256a622dfde49ff06df4e0487fa9782a9a137971acArgyrios Kyrtzidis struct x : T { 266a622dfde49ff06df4e0487fa9782a9a137971acArgyrios Kyrtzidis int aa() { return p; } // expected-error{{use of undeclared identifier 'p'}} 276a622dfde49ff06df4e0487fa9782a9a137971acArgyrios Kyrtzidis }; 286a622dfde49ff06df4e0487fa9782a9a137971acArgyrios Kyrtzidis}; 29d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis 30d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis// rdar://8605381 31d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidisnamespace rdar8605381 { 32d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidisstruct X {}; 33d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis 34d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidisstruct Y { // expected-note{{candidate}} 35d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis Y(); 36d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis}; 37d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis 38d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidisstruct { 39d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis Y obj; 40d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis} objs[] = { 41d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis new Y // expected-error{{no viable conversion}} 42d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis}; 43d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis} 442c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis 452c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis// http://llvm.org/PR8234 462c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidisnamespace PR8234 { 472c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidistemplate<typename Signature> 482c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidisclass callback 492c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis{ 502c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis}; 512c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis 522c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidistemplate<typename R , typename ARG_TYPE0> 532c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidisclass callback<R( ARG_TYPE0)> 542c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis{ 552c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis public: 562c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis callback() {} 572c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis}; 582c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis 592c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidistemplate< typename ARG_TYPE0> 602c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidisclass callback<void( ARG_TYPE0)> 612c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis{ 622c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis public: 632c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis callback() {} 642c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis}; 652c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis 662c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidisvoid f() 672c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis{ 682c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis callback<void(const int&)> op; 692c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis} 702c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis} 71ac6a858f6b7df4e83e4ad5921565a0b425ea00c3Rafael Espindola 72ac6a858f6b7df4e83e4ad5921565a0b425ea00c3Rafael Espindolanamespace PR9007 { 73ac6a858f6b7df4e83e4ad5921565a0b425ea00c3Rafael Espindola struct bar { 74ac6a858f6b7df4e83e4ad5921565a0b425ea00c3Rafael Espindola enum xxx { 75ac6a858f6b7df4e83e4ad5921565a0b425ea00c3Rafael Espindola yyy = sizeof(struct foo*) 76ac6a858f6b7df4e83e4ad5921565a0b425ea00c3Rafael Espindola }; 77ac6a858f6b7df4e83e4ad5921565a0b425ea00c3Rafael Espindola foo *xxx(); 78f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola }; 79f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola} 80f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola 81f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindolanamespace PR9026 { 82f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola class InfallibleTArray { 83f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola }; 84f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola class Variant; 85f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola class CompVariant { 86f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola operator const InfallibleTArray&() const; 87f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola }; 88f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola class Variant { 89f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola operator const CompVariant&() const; 90f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola }; 91f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola void Write(const Variant& __v); 92f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola void Write(const InfallibleTArray& __v); 93f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola Variant x; 94f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola void Write2() { 95f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola Write(x); 96f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola } 97ac6a858f6b7df4e83e4ad5921565a0b425ea00c3Rafael Espindola} 989a30c9946e898e595eb71f23dc9a60303428998bDouglas Gregor 999a30c9946e898e595eb71f23dc9a60303428998bDouglas Gregornamespace PR10270 { 1009a30c9946e898e595eb71f23dc9a60303428998bDouglas Gregor template<typename T> class C; 1019a30c9946e898e595eb71f23dc9a60303428998bDouglas Gregor template<typename T> void f() { 1029a30c9946e898e595eb71f23dc9a60303428998bDouglas Gregor if (C<T> == 1) // expected-error{{expected unqualified-id}} \ 1039a30c9946e898e595eb71f23dc9a60303428998bDouglas Gregor // expected-error{{invalid '==' at end of declaration}} 1049a30c9946e898e595eb71f23dc9a60303428998bDouglas Gregor return; 1059a30c9946e898e595eb71f23dc9a60303428998bDouglas Gregor } 1069a30c9946e898e595eb71f23dc9a60303428998bDouglas Gregor} 107ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis 108ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidisnamespace rdar11806334 { 109ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis 110ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidisclass cc_YCbCr; 111ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis 112ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidisclass cc_rgb 113ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis{ 114ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis public: 115ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis cc_rgb( uint p ); // expected-error {{unknown type name}} 116ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis cc_rgb( cc_YCbCr v_in ); 117ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis}; 118ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis 119ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidisclass cc_hsl 120ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis{ 121ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis public: 122ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis cc_rgb rgb(); 123ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis cc_YCbCr YCbCr(); 124ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis}; 125ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis 126ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidisclass cc_YCbCr 127ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis{ 128ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis public: 129ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis cc_YCbCr( const cc_rgb v_in ); 130ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis}; 131ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis 132ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidiscc_YCbCr cc_hsl::YCbCr() 133ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis{ 134ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis cc_YCbCr v_out = cc_YCbCr( rgb()); 135ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis return v_out; 136ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis} 137ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis 138ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis} 139