1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s
3 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
4
5 // <rdar://problem/8124080>
6 template<typename _Alloc> class allocator;
7 template<class _CharT> struct char_traits;
8 template<typename _CharT, typename _Traits = char_traits<_CharT>,
9 typename _Alloc = allocator<_CharT> >
10 class basic_string;
11 template<typename _CharT, typename _Traits, typename _Alloc>
12 const typename basic_string<_CharT, _Traits, _Alloc>::size_type
13 basic_string<_CharT, _Traits, _Alloc>::_Rep::_S_max_size // expected-error{{no member named '_Rep' in 'basic_string<_CharT, _Traits, _Alloc>'}}
14 = (((npos - sizeof(_Rep_base))/sizeof(_CharT)) - 1) / 4;
15
16 // PR7118
17 template<typename T>
18 class Foo {
19 class Bar;
f()20 void f() {
21 Bar i;
22 }
23 };
24
25 // PR7625
26 template<typename T> struct a : T {
27 struct x : T {
aaa::x28 int aa() { return p; } // expected-error{{use of undeclared identifier 'p'}}
29 };
30 };
31
32 // rdar://8605381
33 namespace rdar8605381 {
34 struct X {};
35
36 struct Y { // expected-note{{candidate constructor (the implicit copy constructor) not viable}}
37 #if __cplusplus >= 201103L // C++11 or later
38 // expected-note@-2 {{candidate constructor (the implicit move constructor) not viable}}
39 #endif
40
41 Y();
42 };
43
44 struct {
45 Y obj;
46 } objs[] = {
47 new Y // expected-error{{no viable conversion}}
48 };
49 }
50
51 // http://llvm.org/PR8234
52 namespace PR8234 {
53 template<typename Signature>
54 class callback
55 {
56 };
57
58 template<typename R , typename ARG_TYPE0>
59 class callback<R( ARG_TYPE0)>
60 {
61 public:
callback()62 callback() {}
63 };
64
65 template< typename ARG_TYPE0>
66 class callback<void( ARG_TYPE0)>
67 {
68 public:
callback()69 callback() {}
70 };
71
f()72 void f()
73 {
74 callback<void(const int&)> op;
75 }
76 }
77
78 namespace PR9007 {
79 struct bar {
80 enum xxx {
81 yyy = sizeof(struct foo*)
82 };
83 foo *xxx();
84 };
85 }
86
87 namespace PR9026 {
88 class InfallibleTArray {
89 };
90 class Variant;
91 class CompVariant {
92 operator const InfallibleTArray&() const;
93 };
94 class Variant {
95 operator const CompVariant&() const;
96 };
97 void Write(const Variant& __v);
98 void Write(const InfallibleTArray& __v);
99 Variant x;
Write2()100 void Write2() {
101 Write(x);
102 }
103 }
104
105 namespace PR10270 {
106 template<typename T> class C;
f()107 template<typename T> void f() {
108 if (C<T> == 1) // expected-error{{expected unqualified-id}}
109 return;
110 }
111 }
112
113 namespace rdar11806334 {
114
115 class cc_YCbCr;
116
117 class cc_rgb
118 {
119 public:
120 cc_rgb( uint p ); // expected-error {{unknown type name}}
121 cc_rgb( cc_YCbCr v_in );
122 };
123
124 class cc_hsl
125 {
126 public:
127 cc_rgb rgb();
128 cc_YCbCr YCbCr();
129 };
130
131 class cc_YCbCr
132 {
133 public:
134 cc_YCbCr( const cc_rgb v_in );
135 };
136
YCbCr()137 cc_YCbCr cc_hsl::YCbCr()
138 {
139 cc_YCbCr v_out = cc_YCbCr( rgb());
140 return v_out;
141 }
142
143 }
144
145 namespace test1 {
146 int getString(const int*);
147 template<int a> class ELFObjectFile {
148 const int* sh;
ELFObjectFile()149 ELFObjectFile() {
150 switch (*sh) {
151 }
152 int SectionName(getString(sh));
153 }
154 };
155 }
156
157 namespace test2 {
158 struct fltSemantics ;
159 const fltSemantics &foobar();
VisitCastExpr(int x)160 void VisitCastExpr(int x) {
161 switch (x) {
162 case 42:
163 const fltSemantics &Sem = foobar();
164 }
165 }
166 }
167
168 namespace test3 {
169 struct nsCSSRect {
170 };
171 static int nsCSSRect::* sides;
172 nsCSSRect dimenX;
ParseBoxCornerRadii(int y)173 void ParseBoxCornerRadii(int y) {
174 switch (y) {
175 }
176 int& x = dimenX.*sides;
177 }
178 }
179
180 namespace pr16964 {
181 template<typename> struct bs {
182 bs();
183 static int* member(); // expected-note{{possible target}}
184 member(); // expected-error{{C++ requires a type specifier for all declarations}}
185 static member(); // expected-error{{C++ requires a type specifier for all declarations}}
186 static int* member(int); // expected-note{{possible target}}
187 };
188
bs()189 template<typename T> bs<T>::bs() { member; } // expected-error{{did you mean to call it}}
190
test()191 bs<int> test() {
192 return bs<int>(); // expected-note{{in instantiation}}
193 }
194 }
195
196 namespace pr12791 {
197 template<class _Alloc> class allocator {};
198 template<class _CharT> struct char_traits;
199 struct input_iterator_tag {};
200 struct forward_iterator_tag : public input_iterator_tag {};
201
202 template<typename _CharT, typename _Traits, typename _Alloc> struct basic_string {
203 struct _Alloc_hider : _Alloc { _Alloc_hider(_CharT*, const _Alloc&); };
204 mutable _Alloc_hider _M_dataplus;
205 template<class _InputIterator> basic_string(_InputIterator __beg, _InputIterator __end, const _Alloc& __a = _Alloc());
206 template<class _InIterator> static _CharT* _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a, input_iterator_tag);
207 template<class _FwdIterator> static _CharT* _S_construct(_FwdIterator __beg, _FwdIterator __end, const _Alloc& __a, forward_iterator_tag);
208 static _CharT* _S_construct(size_type __req, _CharT __c, const _Alloc& __a); // expected-error{{unknown type name 'size_type'}}
209 };
210
211 template<typename _CharT, typename _Traits, typename _Alloc>
212 template<typename _InputIterator>
basic_string(_InputIterator __beg,_InputIterator __end,const _Alloc & __a)213 basic_string<_CharT, _Traits, _Alloc>:: basic_string(_InputIterator __beg, _InputIterator __end, const _Alloc& __a)
214 : _M_dataplus(_S_construct(__beg, __end, __a, input_iterator_tag()), __a) {}
215
216 template<typename _CharT, typename _Traits = char_traits<_CharT>, typename _Alloc = allocator<_CharT> > struct basic_stringbuf {
217 typedef _CharT char_type;
218 typedef basic_string<char_type, _Traits, _Alloc> __string_type;
strpr12791::basic_stringbuf219 __string_type str() const {__string_type((char_type*)0,(char_type*)0);}
220 };
221
222 template class basic_stringbuf<char>;
223 }
224
225 namespace pr16989 {
226 class C {
227 template <class T>
tpl_mem(T *)228 C tpl_mem(T *) { return } // expected-error{{expected expression}}
mem(int * p)229 void mem(int *p) {
230 tpl_mem(p);
231 }
232 };
233 class C2 {
234 void f();
235 };
f()236 void C2::f() {}
237 }
238
239 namespace pr20660 {
240 appendList(int[]...); // expected-error {{C++ requires a type specifier for all declarations}}
appendList(int[]...)241 appendList(int[]...) { } // expected-error {{C++ requires a type specifier for all declarations}}
242 }
243
244